Unterschied zwischen einfachen und doppelten eckigen Klammern in Bash

Fumbani Banda 30 Januar 2023
  1. Einzelne eckige Klammern [ ] in Bash
  2. Doppelte eckige Klammern [[ ]] in Bash
  3. Unterschiede zwischen einfachen und doppelten eckigen Klammern in Bash
Unterschied 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.

Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub