Antworten:
Dafür echo -n
ist es da.
cat
? (zB wenn Sie eine Datei something.txt
anstatt einer Variablen haben $something
)
printf
ist sehr flexibel und portabler als echo
. Wenn Sie wie bei den C / Perl / etc-Implementierungen die \n
Formatzeichenfolge 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 echo
als 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 tr
und GNU tr
.
echo $something
, sein Verhalten hängt von derIFS
Variablen 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 $var
odervar="-e hello \\n world"; echo $var
. Um dies zu lösen, setzen Sie die Variable in doppelte Anführungszeichen:echo "$var"
oder verwenden Sieprintf
.