Echo-Tab-Zeichen in Bash-Skript
Dieser Artikel erklärt, wie man ein oder mehrere tab
-Zeichen echo
kann, wenn man ein Bash-Skript verwendet.
Echo-Tab-Zeichen in Bash-Skript
Der Befehl echo
ist einfach: Er druckt alles, was an das Terminal weitergegeben wird. Normalerweise, wenn Sie eine Variable wie folgt speichern:
example=' 'testing
Versucht man diese Variable mit dem Befehl echo '['$example']'
auszudrucken, erhält man folgende Ausgabe.
[ testing]
Dies ist nicht das, was wir in die Variable eingegeben oder gespeichert haben. Im obigen Beispiel haben wir das Tabulator
-Zeichen zweimal verwendet, aber alles, was wir sehen, ist ein einzelnes Leerzeichen.
Es sollte beachtet werden, dass dieses Verhalten nicht über alle Shells konsistent ist. Wenn Sie beispielsweise dasselbe Skript in der Shell zsh
ausführen, führt dies zu der folgenden Ausgabe, die wir erwarten.
[ testing]
Um auf Bash-Skripte zurückzukommen, wir haben einige Möglichkeiten, dies zu umgehen.
Verwenden Sie das Flag -e
Das Flag -e
bedeutet Interpretation von Backslash-Escapes aktivieren
. Wenn Sie das gleiche Beispiel oben schreiben würden, würden Sie es wie folgt schreiben.
example='\t\t'testing
echo -e '['$example']'
Was die Ausgabe ergibt:
[ testing]
Der Teil \t
repräsentiert einen Tabulator. Da wir also zwei Tabulatoren einführen wollten, haben wir es als \t\t
geschrieben.
Sobald das -e
-Flag übergeben wird, wird das \t
-Symbol als Tabulator interpretiert und entsprechend angezeigt.
Wenn das Flag -e
nicht verwendet wird, wie im folgenden Fall, werden die \t
als wörtliche Zeichenfolgen gelesen und nicht als Tabulatoren verarbeitet.
example='\t\t'testing
echo '['$example']'
Was die Ausgabe ergibt:
[\t\ttesting]
Es sollte beachtet werden, dass das Übergeben des Flags nicht POSIX ist; daher kann dies nicht portabel verwendet werden, wie z. B. in make
, in dem das Flag nicht implementiert ist. Daher werden wir einige Alternativen diskutieren, darunter das fast universelle printf
.
Dieser Teil weicht natürlich leicht von dem ab, womit wir begonnen haben, da wir auf echo
ganz verzichten.
Verwenden Sie doppelte Anführungszeichen
Dies ist wohl die einfachste Lösung und erfordert außer der Syntax keine Erklärung. Sie würden den Befehl wie folgt schreiben.
example=' 'testing
echo "[$example]"
Was das Ergebnis ergeben würde:
[ testing]
Verwenden Sie stattdessen printf
Dies ist die portabelste der drei Lösungen und die am meisten empfohlene. echo
hat viele Implementierungen und Versionen, aber printf
ist meistens gleich.
Auch wenn es irgendwo separat implementiert wird, wird es sehr ähnlich implementiert. Wir können dies sehen, da jede Variation der obigen Methoden zu derselben Ausgabe führen würde, wenn sie mit zsh
aufgerufen wird, aber anders, wenn sie mit bash
aufgerufen wird.
Die Syntax für die Verwendung von printf
ist unten definiert.
example=' 'x
printf '%s\n' "[$example]"
Was die Ausgabe ergibt:
[ x]
Als allgemeine Empfehlung funktioniert echo
gut, solange die benötigte Ausgabe ein einfacher Text wie hello
ist, aber für alles Komplexe kann die Verwendung von echo
schwierig werden, da sein Verhalten über Shells hinweg unterschiedlich sein kann. In all diesen Fällen (Sonderzeichen usw.) wird empfohlen, stattdessen printf
zu verwenden.
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn