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
