Antworten:
Dafür echo -nist es da.
cat? (zB wenn Sie eine Datei something.txtanstatt einer Variablen haben $something)
printfist sehr flexibel und portabler als echo. Wenn Sie wie bei den C / Perl / etc-Implementierungen die \nFormatzeichenfolge nicht mit beenden, wird kein Zeilenumbruch ausgegeben:
printf "%s" "$something" >> file.txt
Wenn Sie die Ausgabe des Befehls verwenden, können Sie xargs in Kombination mit echo verwenden
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr ist eine andere Alternative.
Wenn Sie echoals Ihre Eingabe verwenden, können Sie davonkommen, welche tr -d '\n'.
Diese Technik funktioniert auch, wenn die Ausgabe von anderen Befehlen weitergeleitet wird (mit nur einer einzigen Ausgabezeile). Wenn Sie nicht wissen, ob die Dateien UNIX- oder DOS-Zeilenenden haben, können Sie diese verwenden tr -d '\n\r'.
Hier sind einige Tests, die zeigen, dass dies funktioniert.
Newline enthalten:
something='0123456789' ; echo ${something} | wc -c
11
UNIX Newline:
something='0123456789' ; echo ${something} | tr -d '\n\r' | wc -c
10
DOS-Stil:
something='0123456789' ; echo ${something} | unix2dos | tr -d '\n\r' | wc -c
10
Getestet mit BSD trund GNU tr.
echo $something, sein Verhalten hängt von derIFSVariablen ab, und Sie könnten mit verschwindendem Charakter enden. Sie können Folgendes versuchen:var="hello world"; echo $var(zwei Leerzeichen zwischen Hallo und Welt) odervar="hello world"; IFS='l'; echo $varodervar="-e hello \\n world"; echo $var. Um dies zu lösen, setzen Sie die Variable in doppelte Anführungszeichen:echo "$var"oder verwenden Sieprintf.