Odpowiedzi:
Po to echo -njest.
cat? (np. gdy masz plik something.txtzamiast zmiennej $something)
printfjest bardzo elastyczny i bardziej przenośny niż echo. Podobnie jak implementacje C / Perl / itp., Jeśli nie przerwiesz łańcucha formatu, \nwtedy 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 echojako 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 tri GNU tr.
echo $something, jego zachowanie zależy odIFSzmiennej, 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 $varlubvar="-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.