Wenn Sie als Anfänger anfangen, mit Bash-Skripten zu arbeiten, werden Sie wahrscheinlich zuerst den Befehl echo
Befehl. Sie können sich den Bash-Echo-Befehl ähnlich wie print
vorstellen Befehl in anderen Programmiersprachen. Das echo
Der Befehl ist in Bash integriert und dient dazu, die Ausgabe auf stdout (d. h. Terminal) auszugeben.
In diesem Artikel zeige ich Ihnen, was der Bash-Echo-Befehl ist und wie Sie ihn in Ihren Shell-Skripten verwenden. Bevor wir uns mit dem Thema befassen, lassen Sie uns den Unterschied zwischen einem eingebauten Bash-Befehl und einem externen Befehl sehen.
Integriertes Bash-Echo vs. externer Echo-Befehl
In Linux und anderen Unix-ähnlichen Systemen werden einige Befehle sowohl als eingebaute als auch als externe Befehle bereitgestellt. Zum Beispiel /bin/echo
ist ein externer Befehl, der denselben Namen hat wie echo
bash eingebaut.
Wenn wir einen Befehl aufrufen, der sowohl als eingebauter als auch als externer Befehl existiert, wird normalerweise standardmäßig der eingebaute Befehl ausgeführt. Denn die Prioritätsreihenfolge für Befehlsnamen ist alias
, dann function
, dann builtin
, und dann externer Befehl in den Verzeichnissen, die in $PATH
aufgeführt sind in Ordnung.
Wenn Sie einen externen Befehl erzwingen möchten, der sowohl als integrierter als auch als externer Befehl verfügbar ist, verwenden Sie einfach seinen vollständigen Pfad.
Um dies deutlich zu machen, ruft der folgende Befehl die eingebaute Bash auf:
$ echo <some-text>
Und das Folgende ruft extern echo
auf Befehl:
$ /bin/echo <some-text>
Um herauszufinden, ob ein Befehl ein eingebauter oder ein externer Befehl ist, können wir type verwenden Befehl:
$ type echo echo is a shell builtin
Um alle Speicherorte anzuzeigen, die die angegebene ausführbare Datei enthalten, verwenden Sie -a
Flagge:
$ type -a echo echo is a shell builtin echo is /usr/bin/echo
Weitere Einzelheiten zu type
Befehlsverwendung finden Sie unter folgendem Link:
- Das Type-Command-Tutorial mit Beispielen für Anfänger
In diesem Leitfaden werden wir das in Bash integrierte echo
besprechen Befehl, nicht der externe.
Bash-Echo-Befehlshilfe anzeigen
Fast alle verfügbaren Linux-Befehle haben entweder eine Manpage oder einen Hilfeabschnitt, um zu verstehen, wie dieser Befehl verwendet wird. Die Hilfeanleitung von echo
Der Befehl ist in der Bash-Manpage enthalten
Zugriff auf die Manpage für bash
Befehl, führe aus:
$ man bash
Geben Sie nun /echo
ein und drücken Sie n
bis Sie den Hilfebereich von echo
sehen Befehl.
Alternativ können Sie den folgenden einzeiligen Befehl verwenden, um den Hilfeabschnitt von echo
anzuzeigen Befehl:
$ man bash | less --pattern='^ *echo +\['
Aufbau des Echo-Befehls
Das echo
Der Befehl akzeptiert drei optionale Argumente und den auf stdout auszugebenden Text.
echo [-neE] [arg ...] -n → Do not append a new line -e → enable interpretation of backslash escapes -E → disable the interpretation of backslash escapes (default)
Lassen Sie uns die drei optionalen Argumente vorerst überspringen und sehen, wie Sie echo
verwenden um einen Text auf die Standardausgabe (Terminal) zu drucken.
Sie können den folgenden Code entweder direkt im Terminal ausführen oder eine Skriptdatei erstellen und diese dann ausführen. Ich werde es direkt im Terminal ausführen:
$ echo "Hello World" Hello World
Schauen Sie sich das obige Beispiel an. Es ist das traditionelle hello world
Programm, das wir ausführen, wenn wir eine neue Sprache lernen, und es als ersten Code ausführen. Das echo
Der Befehl hier akzeptiert "hello world"
text als Argument und gibt ihn auf dem Terminal aus (Stdout).
Wie man Zeilenumbrüche unterdrückt
Das Standardverhalten des bash echo
Befehl ist, wird automatisch eine neue Zeile hinzugefügt (\n
). Führen Sie dasselbe hello world
aus Programm erneut und beachten Sie, dass die Terminal-Eingabeaufforderung in einer neuen Zeile angezeigt wird.
$ echo "Hello World" Hello World
Wenn Sie dieses Verhalten nun unterdrücken möchten, können Sie das "-n"
verwenden -Flag, das die neue Zeile unterdrückt, und die Terminal-Eingabeaufforderung wird in derselben Zeile gedruckt, wie unten gezeigt.
$ echo -n "Hello world" Hello world
Was passiert, wenn kein Argument übergeben wird
Wenn dem echo-Befehl kein Argument übergeben wird, schlägt der Befehl nicht fehl, sondern gibt eine leere neue Zeile zurück. Starten Sie Ihr Terminal und führen Sie "echo"
aus und Sie werden sehen, dass es nur eine leere Zeile druckt und beendet wird.
$ echo
$ echo $?
0
Sie können dieses Verhalten überschreiben, indem Sie den "-n"
hinzufügen Flag, das keinen Zeilenumbruch ausgibt, selbst wenn kein Argument übergeben wird.
$ echo -n
Wo wird dies nützlich sein? Sie fragen sich vielleicht. Wenn Sie einige Leerzeilen zwischen Ihren Ausgaben haben möchten, können Sie echo
verwenden ohne Argumente.
Mit Variablen und Befehlen arbeiten
Das echo
Der Befehl interpretiert benutzerdefinierte oder Shell-Variablen, die als Argument übergeben werden, und gibt den Wert aus. Sehen Sie sich die folgenden Beispiele an.
Zuerst die env-Variable "SHELL"
wird an echo
übergeben Befehl und druckt den Wert der Variablen.
# Environmental Variable: $ echo " I am currently using ${SHELL}" I am currently using /bin/bash
Zweitens die benutzerdefinierte Variable "NAME"
wird an echo
übergeben Befehl und der Wert wird an das Terminal ausgegeben.
# User Defined Variable: $ NAME="PoP_OS" $ echo "I am using ${NAME}" I am using PoP_OS
Sie können auch Befehle innerhalb der Argumente ausführen. Sehen Sie sich das folgende Beispiel an, in dem "uname -r"
command wird als Argument übergeben und der Befehl wird interpretiert und die Ausgabe gedruckt.
$ echo "KERNEL_VERSION=$(uname -r)" KERNEL_VERSION=5.11.0-7620-generic
Auswirkungen der Verwendung von einfachen und doppelten Anführungszeichen
In allen vorherigen Beispielen ist Ihnen vielleicht aufgefallen, dass ich die Argumente in doppelte Anführungszeichen gesetzt habe. Was passiert also, wenn das Argument nicht in Anführungszeichen gesetzt wird? Echo Command schlägt nicht fehl und Sie erhalten dieselbe Ausgabe.
Sehen Sie sich das folgende Beispiel an. Ich führe denselben Befehl aus, den ich im vorherigen Abschnitt verwendet habe, aber ohne Anführungszeichen, und er druckt die Ausgabe ohne Fehler.
$ echo I am using ${NAME} I am using Pop_OS
Schließen Sie die Argumente als bewährte Methode immer in Anführungszeichen ein.
Wenn das Argument der Klartext ist, können Sie einfache oder doppelte Anführungszeichen verwenden. Wenn Sie jedoch einen Befehl ausführen oder eine Variable im Argument erweitern möchten, sollten Sie doppelte Anführungszeichen und keine einfachen Anführungszeichen verwenden.
Das einfache Anführungszeichen verhindert, dass ein Befehl ausgeführt oder eine Variable erweitert wird. Es behandelt einfach das gesamte Argument als Klartext.
Sehen Sie sich das folgende Beispiel an. Wenn ich das Argument in einfache Anführungszeichen einschließe, wird die Variable "NAME"
wird nicht als Text interpretiert und behandelt.
# SINGLE QUOTES $ echo 'I am using ${NAME}' I am using ${NAME} # DOUBLE QUOTES $ echo "I am using Linux ${NAME}" I am using Linux PoP_OS
Ausgangsumleitung und -leitung
Wie bereits erwähnt, ist das echo
Der Befehl gibt die Ausgabe standardmäßig auf der Standardausgabe (Terminal) aus. Wenn Sie Shell-Skripte schreiben, können Sie in eine Situation geraten, in der Sie die Ausgabe von echo
speichern müssen Befehl in eine Datei. Verwenden Sie dazu die Bash-Umleitung Betreiber.
$ echo "Welcome to OSTechNix" > /tmp/op.log
$ cat /tmp/op.log Welcome to OSTechNix
Empfohlene Lektüre:
- Bash-Umleitung mit Beispielen erklärt
- Bash Heredoc-Tutorial für Anfänger
Sie können auch die Ausgabe des echo
senden Befehl an die pipe
zur Weiterverarbeitung.
$ echo "I am using ${NAME}" I am using PoP_OS
$ echo "I am using ${NAME}" | grep -i -o POP PoP
Mehrzeiliger String
Ihr Argument kann manchmal zu mehr als einer Zeile führen. Sie können das mehrzeilige Argument in doppelte Anführungszeichen setzen, um die Ausgabe unter Berücksichtigung neuer Zeilen, Tabulatoren und Leerzeichen zu drucken.
$ echo "This is Line 1
This is Line 2
This is Line 3"
Obwohl Ihr Argument als mehrzeilige Zeichenfolge übergeben wird, möchten Sie es in einigen Fällen möglicherweise als einzelne Zeile drucken. Verwenden Sie in solchen Fällen den "\"
Symbol am Ende jeder Zeile, sodass die nächste Zeile mit der vorherigen Zeile fortgesetzt wird.
$ echo "I am running \ the echo command \ again"
Beispielausgabe:
I am running the echo command again
Dies ist nicht ausschließlich spezifisch für bash echo
Befehl. Sie können diesen Ansatz verwenden, um sehr große Befehle zur besseren Lesbarkeit mehrzeilig zu erzeugen.
Backslash entgeht der Interpretation
Das echo
Der Befehl akzeptiert viele maskierte Zeichen als Argumente. Damit diese Sonderzeichen vom echo-Befehl erkannt werden, muss der "-e"
Flagge übergeben werden soll. Die Liste der unterstützten Sonderzeichen können Sie dem echo
entnehmen Manpage des Befehls.
Sie werden nicht alle Sonderzeichen in Ihrem täglichen Leben verwenden. Sie werden hauptsächlich Newline-Zeichen, Tabulatoren und Backslash-Escape-Zeichen verwenden.
Neue-Zeile-Zeichen - \n
Eine neue Zeile wird hinzugefügt, wenn Sie \n
übergeben zum echo
Befehl. Sie können auch mehrere \n übergeben, wodurch entsprechend mehr Zeilen hinzugefügt werden.
$ echo -e "This is the first line\nThis is the second Line\nThis is the third line"
Beispielausgabe:
This is the first line This is the second Line This is the third line
Horizontaler Tabulator - \t
Wenn \t
verwendet wird, werden Tabulatoren hinzugefügt. Sie können auch mehrere Escape-Zeichen kombinieren, wie ich es unten getan habe.
$ echo -e "Enter the U_NAME\t:\n" Enter the U_NAME :
Vertikaler Tabulator - \v
Verwenden Sie zum vertikalen Erstellen von Registerkarten \v
.
$ echo -e "Enter the username\vEnter the password" Enter the username Enter the password
Ausgabe unterdrücken - \c
Wenn \c
verwendet wird, alles, was nach \c
kommt wird unterdrückt.
$ echo -e "I am using \cCosmic Desktop" I am using
Wagenrücklauf - \r
Wenn \r
verwendet wird, wird der Cursor auf das erste Zeichen und alles, was nach \r
kommt, zurückgesetzt wird gedruckt und ersetzt vorhandene Zeichen.
$ echo -e "I use Arch, \rBtw" Btwse Arch,
Backslash-Escape-Interpretation deaktivieren
Das Standardverhalten von echo
Der Befehl behandelt Sonderzeichen als Klartext, es sei denn -e
Flagge wird übergeben. Dasselbe Verhalten kann mit -E
erreicht werden Flagge.
Ich zeige Ihnen ein Beispiel.
Lassen Sie mich echo
ausführen Befehl ohne Flags:
$ echo "Welcome to OSTechNix \nblog" Welcome to OSTechNix \nblog
Als Nächstes führe ich denselben Befehl mit -E
aus Flagge:
$ echo -E "Welcome to OSTechNix \nblog" Welcome to OSTechNix \nblog
Wie Sie sehen können, ist das Ergebnis ähnlich, wenn ich echo
ausführe Befehl mit -E
Flagge und ohne Flagge. In beiden Fällen echo
behandelt den /n
Sonderzeichen als einfache Zeichenkette.
Lassen Sie mich jetzt denselben Befehl noch einmal ausführen, diesmal jedoch mit -e
Flagge.
$ echo -e "Welcome to OSTechNix \nblog"
Welcome to OSTechNix
blog
Hast du den Unterschied bemerkt? Der echo-Befehl hat /n
nicht behandelt Zeichen als Klartext und es zeigt alles an, was nach dem /n
kommt Sonderzeichen in der neuen Zeile.
Wenn Sie also irgendwelche Sonderzeichen wie \n
verwenden möchten , \t
, \v
usw. sollten Sie -e
verwenden Flagge. Sonst echo
behandelt alles als einfachen String.
Lassen Sie mich Ihnen ein weiteres Beispiel zeigen.
$ echo -e "Hello world\nHello World\nHello World" Hello world Hello World Hello World
Wie Sie in der obigen Ausgabe sehen, echo
Befehl zeigt "Hello World"
an Zeichenfolge dreimal nacheinander (d. h. in einer neuen Zeile).
Was ist, wenn Sie nur einem bestimmten Sonderzeichen entkommen möchten? Hier steht doppelter Backslash (\\
) kommt zur Rettung.
Zum Beispiel möchte ich das dritte /n
maskieren Sonderzeichen im vorherigen Befehl.
Dazu stelle ich dem dritten Sonderzeichen einen doppelten Backslash voran (\\
) wie unten:
$ echo -e "Hello world\nHello World\\\nHello World" Hello world Hello World\nHello World
Jetzt echo
Befehl behandelt den dritten \n
Sonderzeichen als einfache Zeichenkette.
Wenn Sie also viele Sonderzeichen haben und nur ein bestimmtes Sonderzeichen maskieren möchten, müssen Sie den doppelten umgekehrten Schrägstrich hinzufügen (\\
) vor diesem Sonderzeichen.
Schlussfolgerung
In diesem Artikel haben wir gesehen, was echo
ist Befehl ist und verschiedene Möglichkeiten, ihn zu verwenden. Dies ist ein sehr einfacher Befehl und es gibt kein Shell-Skript ohne die Verwendung von echo
Befehl, es sei denn, Sie entscheiden sich für printf
was die Alternative für echo
ist Befehl in bash.
Verwandte Lektüre:
- Bash-Scripting – Variablen mit Beispielen erklärt
- Bash-Scripting – Funktionen mit Beispielen erklärt
- Bash-Skripting – For-Schleife mit Beispielen erklärt
- Bash-Skripting – While- und Until-Schleife mit Beispielen erklärt