2012-03-01 08:25:33 +0000 2012-03-01 08:25:33 +0000
84
84

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?

Antworten (4)

98
98
98
2012-03-01 08:28:15 +0000

Dafür ist echo -n gedacht.

42
42
42
2012-03-01 14:42:29 +0000

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
7
7
7
2016-12-14 07:52:48 +0000

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
0
0
0
2017-05-11 11:41:20 +0000

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.