Der Echo-Befehl ist eine praktische Möglichkeit, irgendetwas in Shell-Skripten auszugeben.
Standardmäßig fügt es immer ein neues Zeilenzeichen hinzu. Wenn Sie also mehrere echo-Befehle ausführen, wird jede Ausgabe in einer neuen Zeile angezeigt.
Dies kann jedoch in Situationen unpraktisch sein, in denen Sie mit dem Echo-Befehl, aber ohne Zeilenumbruch drucken müssen.
Stellen Sie sich vor, Sie versuchen, die Fibonacci-Reihe zu drucken:1, 1, 2, 3, 5, 8, 13, 21, 34, 55
Sie können das -n
verwenden Flag des echo-Befehls zum Drucken ohne Zeilenumbruch:
echo -n "Hello World"
Sie werden feststellen, dass die Eingabeaufforderung in derselben Zeile unmittelbar nach Hello World now angezeigt wird.
Lassen Sie uns einen genaueren Blick darauf werfen.
Echo-Befehl ohne Zeilenumbruch drucken
Nehmen wir eine einfache for-Schleife, die den Inhalt eines Arrays in einem Bash-Skript ausgibt, und überprüfen Sie die Ausgabe.
$ bash_array=(1 2 3 4)
$ for i in ${bash_array[@]}; do
echo $i
done
1
2
3
4
Wie Sie sehen können, wird die Ausgabe jedes Mal, wenn der echo-Befehl ausgeführt wird, in einem Zeilenumbruch angezeigt. Manchmal möchten Sie das, manchmal möchten Sie, dass die Ausgabe in derselben Zeile fortgesetzt wird, ohne mit dem Zeilenumbruch zu beginnen.
Treffen Sie das "-n"-Flag
Die Bash-Implementierung des echo-Befehls hängt normalerweise ein "\n" (ein Escape-Zeichen, um einen Zeilenumbruch anzuzeigen) an die Ausgabe an. Das Flag "-n" fügt kein "\n" an die Ausgabe an.
$ bash_array=(1 2 3 4 5 6 7 8)
$ for i in ${bash_array[@]}; do
echo -n $i
done
12345678
Wie Sie sehen können, werden jetzt alle Zahlen in einer einzigen Zeile angezeigt. Das bedeutet, dass jedes Mal, wenn der echo-Befehl ausgeführt wurde, kein Zeilenumbruch ausgegeben wurde.
echo -n hat nicht funktioniert. Was nun?
In einigen Fällen mit echo -n
gibt auch das -n
aus Zeichen statt den Text ohne Zeilenumbruch auszugeben.
Das ist möglich, wenn es eine separate Implementierung des echo-Befehls durch die von Ihnen verwendete Shell gibt.
Verwirrt? Einige Distributionen und Shells haben möglicherweise ihre eigene Implementierung einiger eingebauter Shell-Befehle. Echo ist ein solcher Befehl.
Hier sind ein paar Dinge, die Sie ausprobieren können.
Fügen Sie das Shebang-Zeichen gefolgt von /bin/bash hinzu, um sicherzustellen, dass Ihr Shell-Skript die Bash-Shell verwendet.
#!/bin/bash
Wenn das nicht funktioniert, können Sie versuchen, den Befehl printf anstelle von echo zu verwenden.
Standardmäßig fügt printf das Zeilenumbruchzeichen nicht hinzu:
printf "Something without newline"
Sie müssen das Zeilenumbruchzeichen \n:
explizit angebenprintf "Something with newline\n"
Der printf-Befehl verhält sich wie der printf-Befehl in C und Sie können ihn verwenden, um komplizierter formatierte Ausgaben zu drucken.
Der Befehl printf hat ein viel konsistenteres Verhalten. echo ist gut für einfache Dinge, aber ich empfehle die Verwendung von printf für kompliziertere Dinge.
Ich hoffe, dieses einfache Tutorial hilft Ihnen dabei, das Verhalten von Zeilenumbrüchen in Bash-Skripten zu steuern.