Echo-Tab-Zeichen in Bash-Skript

Muhammad Husnain 20 Juni 2023
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.

Muhammad Husnain avatar Muhammad Husnain avatar

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

Verwandter Artikel - Bash Echo