Setzen die Variable auf die Ausgabe des Befehls in Bash
Dieses Tutorial demonstriert das Zuweisen der Ausgabe eines Befehls zu einer Variablen in Bash mithilfe der Befehlssubstitution.
Befehlsersetzung in Bash
Die Befehlsersetzung ist eine Bash-Funktion, die es uns ermöglicht, Linux-Befehle auszuführen und die Ausgabe des Befehls in einer Bash-Variablen zu speichern. Sobald ein Befehl unter Verwendung der Befehlsersetzungssyntax ausgeführt wird, ersetzt die Standardausgabe des Befehls den Befehl, wobei alle nachgestellten Zeilenumbrüche entfernt werden.
Die Befehlsersetzung verwendet zwei verschiedene Syntaxen, um die Befehlsausgabe in einer Variablen zu speichern.
Der erste Syntaxtyp setzt den Befehl in Klammern und fügt am Anfang ein $
-Zeichen hinzu, wie unten gezeigt.
Jedes Zeichen innerhalb der Klammern wird als Teil des Befehls behandelt.
output=$(command)
output=$(command argument-1)
output=$(/path/to/command)
output=$(/path/to/command argument-1)
Der zweite Syntaxtyp verwendet Backticks um den Befehl.
output=`command`
output=`command argument-1`
output=`/path/to/command`
output=`/path/to/command argument-1`
Bash-Befehlsausgabe an Variable
Wir verwenden die folgenden Beispiele, um die Befehlsersetzung in einem Bash-Skript zu demonstrieren.
Im Folgenden verwenden wir die erste Syntax aus Klammern und einem Dollarzeichen am Anfang. Der Befehl whoami
wird ausgeführt und die Ausgabe ersetzt den Befehl, der dann der Variable user
zugewiesen wird. Wir verwenden den Befehl echo
, um die Nachricht auf der Standardausgabe anzuzeigen.
user=$(whoami)
echo "The logged in user is $user"
Wenn Sie dieses Skript ausführen, wird die folgende Ausgabe angezeigt.
The logged in user is delftstack
Im Folgenden verwenden wir die Backticks-Syntax. Die Ausgabe des whoami
-Befehls wird der user
-Variablen zugewiesen, und echo
wird verwendet, um die Nachricht auf dem Terminal auszugeben.
user=`whoami`
echo "The logged in user is $user"
Beim Ausführen des Skripts wird die folgende Ausgabe angezeigt.
The logged in user is delftstack
Im folgenden Skript verwenden wir ls
, um den Inhalt des Ordners delftstack
aufzulisten, wobei die Klammern und die Dollarzeichen-Syntax verwendet werden. Die Ausgabe des ls
-Befehls wird der files
-Variablen zugewiesen. Mit dem Befehl echo
wird der Inhalt der Variablen files
auf dem Terminal ausgegeben.
files=$(ls -l delftstack)
echo "$files"
Das Ausführen des Skripts gibt die folgende Ausgabe auf der Standardausgabe aus.
total 4
-rw-r--r-- 1 fumba fumba 752 Nov 17 12:51 directory.sh
-rw-r--r-- 1 fumba fumba 79 Nov 19 13:11 foo1.sh
drwxr-xr-x 1 fumba fumba 4096 Nov 22 13:57 part
-rw-r--r-- 1 fumba fumba 213 Nov 21 21:10 regex.sh
Das folgende Bash-Skript verwendet die Backticks-Syntax, um die Ausgabe des Befehls ls
der Variablen files
zuzuweisen, und der Befehl echo
wird verwendet, um den Inhalt der Variablen files
auf der Standardausgabe auszugeben.
files=`ls -l delftstack`
echo "$files"
Beim Ausführen des Skripts wird die folgende Ausgabe angezeigt.
total 4
-rw-r--r-- 1 fumba fumba 752 Nov 17 12:51 directory.sh
-rw-r--r-- 1 fumba fumba 79 Nov 19 13:11 foo1.sh
drwxr-xr-x 1 fumba fumba 4096 Nov 22 13:57 part
-rw-r--r-- 1 fumba fumba 213 Nov 21 21:10 regex.sh
Wir verwenden die folgende Syntax, um einen mehrzeiligen Befehl einer Variablen im Bash-Skript zuzuweisen.
variable_name=$(command \
argument 1 \
argument 2 \
argument 3)
Das folgende Bash-Skript demonstriert die Zuweisung der Ausgabe eines mehrzeiligen Befehls zu einer Variablen. Der Befehl ls
listet den gesamten Inhalt des aktuellen Ordners auf, und die Ausgabe wird an den Befehl head
weitergeleitet. Der head
-Befehl wählt nur die ersten 5
Zeilen der Eingabe von ls
aus und leitet die Ausgabe an den grep
-Befehl weiter. Der Befehl grep
passt die Zeile mit dem Wort flow
an und gibt sie auf der Standardausgabe aus.
files=$(ls -l \
| \
head -5 \
| grep -i "flow")
echo $files
Beim Ausführen des Skripts wird die folgende Ausgabe angezeigt.
drwxr-xr-x 1 fumba fumba 4096 Sep 30 09:29 airflow