Odpowiedzi:
Po to echo -n
jest.
cat
? (np. gdy masz plik something.txt
zamiast zmiennej $something
)
printf
jest bardzo elastyczny i bardziej przenośny niż echo
. Podobnie jak implementacje C / Perl / itp., Jeśli nie przerwiesz łańcucha formatu, \n
wtedy nie zostanie wydrukowany znak nowej linii:
printf "%s" "$something" >> file.txt
Jeśli używasz danych wyjściowych polecenia, możesz używać xargs w połączeniu z echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr
to kolejna alternatywa.
Jeśli używasz echo
jako danych wejściowych, możesz uciec, które tr -d '\n'
.
Ta technika działa również w przypadku przesyłania strumieniowego danych wyjściowych z innych poleceń (tylko z jednym wierszem danych wyjściowych). Ponadto, jeśli nie wiesz, czy pliki mają końcówki linii UNIX lub DOS, możesz użyć tr -d '\n\r'
.
Oto kilka testów pokazujących, że to działa.
Newline zawiera:
something='0123456789' ; echo ${something} | wc -c
11
Nowa linia UNIX:
something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10
Styl DOS:
something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10
Testowane z BSD tr
i GNU tr
.
echo $something
, jego zachowanie zależy odIFS
zmiennej, a możesz skończyć z znikaniem postaci. Możesz spróbować wykonać następujące czynności:var="hello world"; echo $var
(dwie spacje między witaniem a światem) lubvar="hello world"; IFS='l'; echo $var
lubvar="-e hello \\n world"; echo $var
. Aby rozwiązać ten problem, umieść podwójne cudzysłowy wokół zmiennej w ten sposób:echo "$var"
lub użyjprintf
.