Risposte:
Questo è ciò che echo -n
serve.
cat
? (ad esempio quando si dispone di un file something.txt
anziché di una variabile $something
)
printf
è molto flessibile e più portatile di echo
. Come il C / Perl / etc implementazioni, se non si termina la stringa di formato con \n
allora nessun capo ':
printf "%s" "$something" >> file.txt
Se stai usando l'output del comando, puoi usare xargs in combinazione con echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr
è un'altra alternativa.
Se stai usando echo
come input puoi scappare quale tr -d '\n'
.
Questa tecnica funziona anche quando si esegue il piping dell'output da altri comandi (con una sola riga di output). Inoltre, se non sai se i file hanno terminazioni di linea UNIX o DOS puoi usare tr -d '\n\r'
.
Ecco alcuni test che dimostrano che funziona.
Newline inclusa:
something='0123456789' ; echo ${something} | wc -c
11
Newline UNIX:
something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10
Stile DOS:
something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10
Testato con BSD tr
e GNU tr
.
echo $something
, il suo comportamento dipende dallaIFS
variabile e potresti finire con il carattere che scompare. Puoi provare quanto segue:var="hello world"; echo $var
(due spazi tra ciao e mondo) oppurevar="hello world"; IFS='l'; echo $var
oppurevar="-e hello \\n world"; echo $var
. Per risolverlo, inserisci le doppie virgolette attorno alla variabile in questo modo:echo "$var"
oppure usaprintf
.