Mit echo gibt man in der Bash Informationen aus. Der echo-Befehl ist eigentlich simpel. Komplizierter wird es mit Umbrüchen, Farben und Steuerzeichen. An dieser Stelle erkläre ich Dir ausführlich, wie echo richtig funktioniert.

Um Text im Terminal auszugeben, gibt es drei verschiedene Befehle bzw. Programme: echo, printf und tput. Das komplexeste Werkzeug ist tput. tput kannst Du z.B. dazu verwenden, um den Cursor auf dem Bildschirm zu bewegen oder Informationen über den Status des Terminals abzurufen bzw. zurückzusetzen. Dahingegen geben echo und printf nur Texte aus. An dieser Stelle setzen wir uns erst einmal nur mit echo auseinander.

Text und Informationen mit echo ausgeben

Mit echo kannst Du Text und den Inhalt von Variablen ausgeben. Um »Hallo Welt« zu schreiben, genügt…

$ echo Hallo Welt
Hallo Welt

Besser – denn es beugt Fehlern vor – ist es, den Text in Anführungszeichen zu setzen.

$ echo "Hallo Welt"
Hallo Welt

Variablen gibst Du einfach aus, indem Du den Namen der Variablen eingibst. So kannst Du z.B. mit der automatischen Variablen PWD Dein aktuelles Arbeitsverzeichnis ausgeben:

$ echo $PWD
/Users/moritz/Desktop

Du kannst auch die Ausgabe von Variablen mit Text kombinieren.

$ echo "Du bist in diesem Verzeichnis: $PWD."
/Users/moritz/Desktop

Kombinierst Du die Ausgabe von Text und Variablen, ist es sicherer die Variable mit geschweiften Klammern einzuklammern. Das verhindert, dass Zeichen, die direkt hinter der Variable folgen, als Variablennamen interpretiert werden. Warum das wichtig ist, wird klar, wenn Du z.B. die Textfarbe in einer Variable speicherst und dann im Text aufrufst.

$ rot="\033[31m" (1)
$ echo "$rotRoter Text" (2)
text (3)
1 Die Variable $rot bekommt ein Steuerzeichen für die Farbe rot übergeben.
2 echo gibt an dieser Stelle aber nicht die Variable $rot, sondern die Variable $rotRoter aus.
3 Das Ergebnis lautet dann, text sofern die Variable $rotRoter nicht existiert.

Damit die Variable $rot genutzt werden kann, musst Du sie deshalb in geschweiften Klammern schreiben, so ${rot}. Um das obige Beispiel korrekt umzusetzen, musst Du also folgendes ins Terminal eingeben.

$ rot="\033[31m"
$ echo -e "${rot}Roter Text"
Roter Text

Sicherlich ist Dir die zusätzliche Option -e aufgefallen. Diese Option schaltet die Verwendung von Steuerzeichen ein.

echo und die Steuerzeichen

Steuerzeichen sind Zeichen, die nicht direkt auf dem Bildschirm sichtbar sind. Übliche Steuerzeichen sind z.B. ein Tabulatorenschritt, Zeilenumbruch, Alarmton, Textanfang oder Textende. Für diese Zeichen sind im ASCII -Zeichencode Steuerzeichen mit den Codewerten 0 bis 31 reserviert.

Steuerzeichen »versteht« der echo-Befehl nur, wenn Du die Option -e nutzt. Während der erste Befehl einfach nur die Zeichen ausgibt,…

$ echo "\a"
\a

…ertönt beim zweiten Befehl ein Alarm-Ton.

$ echo -e "\a"

Standardmäßig beendet der echo-Befehl die Ausgabe immer mit einem Zeilenumbruch. Den Zeilenumbruch unterbindest Du auf zwei verschiedene Weisen. Entweder mit dem Steuerzeichen \c am Ende der Ausgabe – die Option -e muss gesetzt sein, z.B. so:

$ echo -e "Fang den Satz an \c";echo "und beende diesen in der gleichen Zeile."

Oder Du setzt die Option -n für die Unterdrückung des Zeilenumbruches.

$ echo -n "Fang den Satz an ";echo "und beende diesen in der gleichen Zeile."

Welche Steuerzeichen für echo in der Bash-Shell zur Verfügung stehen, zeigt Dir die folgende Tabelle.

Tabelle 1. Escape-Sequenzen
Escape-Sequenz Bedeutung

\a

Alarm-Ton (Beep)

\b

Backspace; ein Zeichen zurück

\c

continue; das Newline-Zeichen unterdrücken

\f

Form Feed; einige Zeilen weiterspringen

\n

Newline; Zeilenumbruch

\r

return; zurück zum Anfang der Zeile

\t

Tabulator (horizontal)

\v

Tabulator (vertikal); meistens eine Zeile vorwärts

\\

das Backslash-Zeichen ausgeben

\0nnn

ASCII-Zeichen in oktaler Form (nur sh und ksh); z. B. aus \0102 wird B (dezimal 66)

\nnn

ASCII-Zeichen in oktaler Form (nur Bash); z. B. aus \102 wird wird B (dezimal 66)

Zusammenspiel: Farben und echo

Um bei der Textausgabe über echo die Farbe zu ändern, nutzt man auch Steuerzeichen, die Textattribute wie Farbe, Fettschrift oder Hintergrundfarbe verändern.

Dazu gibt es verschiedene Möglichkeiten bzw. Zeichenketten. Die hässlichste und sehr schwer lesbare Variante sieht so aus und sämtliche Zeichen müssen von Anführungszeichen umklammert werden:

$ echo -e "\033[31mRoter Text"

Wie zuvor, funktionieren die Steuerzeichen nur, wenn Du die Option -e nutzt. Die Zeichenkette für Farbe ist immer die gleiche. Zuerst wird Sie mit \033[ eingeleitet, dann folgt eine Zahl z.B. 33 für Gelb und abschließend ein m.

Um alle Attribute wieder zurückzusetzen, nutzt man \033[0m.

$ echo -e "\033[0m"

Um so z.B. einen Satz in gelber Schrift auszugeben, eine Variable – hier eine Zufallszahl mit $RANDOM in blau und dann wieder alles auf Null zu setzen, sieht der echo-Befehl dann so aus.

$ echo -e "\033[33mEine Zufallszahl in blau: \033[34m$RANDOM\033[0m"

Du siehst, es wird schnell hässlich und unlesbar. Zum Glück gibt es eine einfachere Lösung: Zuert speichert man die Sequenzen in einer Variablen, die man anschließend dann gemeinsam mit dem echo-Befehl nutzt.

Farben in Variablen schreiben

reset='\x1B[0m'
yellow='\x1b[0;33m'
boldyellow='\x1b[1;33m'
white='\x1b[0;37m'
boldwhite='\x1b[1;37m'
grey='\x1b[1;30m'

Tabelle mit Farb-Codes

Tabelle 2. Escape-Codes für Farbe, Hintergrundfarbe
Steuerzeichen Beschreibung

\033[0m

alle Attribute zurücksetzen

\033[1m

Fettschrift

\033[4m

Unterstreichen

\033[5m

Blinken

\033[7m

inverse Darstellung

\033[30m

Schriftfarbe schwarz

\033[31m

Schriftfarbe rot

\033[32m

Schriftfarbe grün

\033[33m

Schriftfarbe gelb

\033[34m

Schriftfarbe blau

\033[35m

Schriftfarbe magenta

\033[36m

Schriftfarbe türkis

\033[37m

Schriftfarbe weiß

\033[40m

Hintergrund schwarz

\033[41m

Hintergrund rot

\033[42m

Hintergrund grün

\033[43m

Hintergrund gelb

\033[44m

Hintergrund blau

\033[45m

Hintergrund magenta

\033[46m

Hintergrund türkis

\033[47m

Hintergrund weiß