Unterschied zwischen einfachen und doppelten eckigen Klammern in Bash
-
Einzelne eckige Klammern
[ ]
in Bash -
Doppelte eckige Klammern
[[ ]]
in Bash - Unterschiede zwischen einfachen und doppelten eckigen Klammern in Bash
Dieses Tutorial erklärt, was einfache eckige Klammern und doppelte eckige Klammern in Bash sind und welche Unterschiede sie haben.
Einzelne eckige Klammern [ ]
in Bash
Eine einzelne eckige Klammer [
, ist ein anderer Name für den Befehl test
in der Bash-Shell. Der Befehl test
ist ein Standarddienstprogramm in allen POSIX-Shells. Das ]
ist das letzte Argument für [
.
Die beiden folgenden Skripte zeigen, dass [
und der Befehl test
ähnlich sind. Das erste Skript prüft anhand der einfachen eckigen Klammern, ob der Wert in der Variablen $y
größer ist als der Wert in der Variablen $x
und gibt die Ausgabe abhängig von den Ergebnissen der Auswertung im Befehl test
aus.
In unserem Fall ist der Wert der Variablen $y
grösser als der Wert der Variablen $x
.
#!/bin/bash
x=2
y=3
if [ $y -gt $x ]
then
echo "$y is greater than $x"
else
echo "$x is greater than $y"
fi
Das Skript gibt bei der Ausführung die folgende Meldung auf der Standardausgabe aus.
3 is greater than 2
Dieses Skript verwendet anstelle der einzelnen eckigen Klammern den Befehl test
. Das Skript prüft, ob der Wert in der Variablen $y
grösser ist als der Wert in der Variablen $x
.
Wenn der test
wahr zurückgibt, führt das Skript den ersten echo
-Befehl aus, und wenn der test
falsch zurückgibt, führt es den echo
-Befehl im Abschnitt else
aus.
In unserem Fall hat die Variable $y
einen um 3 grösseren Wert als die Variable $x
, 2. Das Skript führt den ersten echo
-Befehl aus.
#!/bin/bash
x=2
y=3
if test $y -gt $x
then
echo "$y is greater than $x"
else
echo "$x is greater than $y"
fi
Das Skript gibt die folgende Ausgabe auf der Standardausgabe aus.
3 is greater than 2
Doppelte eckige Klammern [[ ]]
in Bash
Die doppelten eckigen Klammern [[]]
erweitern den von ksh88
übernommenen test
-Befehl; es ist vielseitiger. Die doppelten eckigen Klammern können für den Musterabgleich und die Parametererweiterung verwendet werden und erlauben keine Wortaufteilung.
Die Verwendung doppelter eckiger Klammern hilft, Logikfehler in Bash-Skripten zu vermeiden. In den doppelten eckigen Klammern funktionieren die Operatoren &&
, ||
, <
und >
, während sie im Befehl test
Fehler ausgeben.
Wir verwenden im folgenden Skript doppelte eckige Klammern für die arithmetische Auswertung. Die doppelten eckigen Klammern testen, ob der Wert in der Variablen $x
gleich dem Wert in der Variablen $y
ist.
Der Test gibt true zurück und führt den ersten echo
-Befehl im Skript aus.
#!/bin/bash
x=10
y=10
if [[ $x -eq $y ]]
then
echo "\$x is equal to \$y"
else
echo "\$x is not equal to \$y"
fi
Das Ausführen des Skripts erzeugt die folgende Ausgabe auf dem Standardterminal.
$x is equal to $y
Unterschiede zwischen einfachen und doppelten eckigen Klammern in Bash
Der Befehl test
ist ein integriertes Bash-Dienstprogramm in Standard-POSIX-Shells, während die doppelten eckigen Klammern kein Befehl sind. Die doppelte eckige Klammer ist eine Erweiterung in Bash, die von ksh88
als Schlüsselwort übernommen wurde.
Die doppelten eckigen Klammern unterstützen im Vergleich zum test
-Befehl mehr Funktionen. Anders als der test
-Befehl unterstützt er Mustervergleich und Parametererweiterung und erlaubt keine Wortaufteilung.