wie echote ich $something >> file.txt ohne Wagenrücklauf?
Wenn ich echo $something >> file.txt
wähle, wird eine neue Zeile an die Datei angehängt.
Was, wenn ich ohne neue Zeile anhängen möchte?
Wenn ich echo $something >> file.txt
wähle, wird eine neue Zeile an die Datei angehängt.
Was, wenn ich ohne neue Zeile anhängen möchte?
Dafür ist echo -n
gedacht.
printf
ist sehr flexibel und portabler als echo
. Wie bei den C/Perl/etc-Implementierungen wird kein Zeilenumbruch gedruckt, wenn Sie den Formatstring nicht mit \n
abschließen:
printf "%s" "$something" >> file.txt
Wenn Sie die Ausgabe des Befehls verwenden, können Sie xargs in Kombination mit echo
/sbin/ip route|awk '/default/ { print $3 }' | xargs echo -n >> /etc/hosts
tr
ist eine weitere Alternative.
Wenn Sie echo
als Eingabe verwenden, können Sie mit tr -d '\n'
auskommen.
Diese Technik funktioniert auch, wenn Sie die Ausgabe anderer Befehle über die Pipeline einleiten (mit nur einer einzigen Zeile Ausgabe). Außerdem können Sie, wenn Sie nicht wissen, ob die Dateien UNIX- oder DOS-Zeilenenden haben, tr -d '\n\r'
verwenden.
Hier sind einige Tests, die zeigen, dass dies funktioniert.
Zeilenumbruch enthalten:
something='0123456789' ; echo ${something} | wc -c
11
UNIX Zeilenumbruch:
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
.