Ich bin etwas verwirrt darüber, was diese Operatoren anders machen, wenn sie in Bash verwendet werden (Klammern, doppelte Klammern, Klammern und doppelte Klammern).
[[ , [ , ( , ((
Ich habe Leute gesehen, die sie für if-Anweisungen wie diese verwenden:
if [[condition]]
if [condition]
if ((condition))
if (condition)
Akzeptierte Antwort:
In Bourne-ähnlichen Shells ein if
Anweisung sieht normalerweise so aus
if
command-list1
then
command-list2
else
command-list3
fi
Das then
-Klausel wird ausgeführt, wenn der Exit-Code der command-list1
Liste der Befehle ist Null. Wenn der Exit-Code ungleich Null ist, dann der else
Klausel ausgeführt wird. command-list1
kann
einfach oder komplex sein. Es kann sich beispielsweise um eine Folge von einer oder mehreren Pipelines handeln, die durch einen der Operatoren ;
getrennt sind , &
, &&
, ||
oder Zeilenumbruch. Der if
Die unten gezeigten Bedingungen sind nur Sonderfälle von command-list1
:
-
if [ condition ]
[
ist ein anderer Name für den traditionellentest
Befehl.[
/test
ist ein Standard-POSIX-Dienstprogramm. Alle POSIX-Shells haben es eingebaut (obwohl das von POSIX² nicht benötigt wird). Dertest
Befehl setzt einen Exit-Code und denif
Anweisung wirkt entsprechend. Typische Tests sind, ob eine Datei existiert oder eine Zahl gleich einer anderen ist. -
if [[ condition ]]
Dies ist eine neue aktualisierte Variante von
test
¹ von ksh diese Bash , zsh , yash , busybox sch auch unterstützen. Dieser[[ ... ]]
construct setzt auch einen Exit-Code und denif
Anweisung wirkt entsprechend. Unter seinen erweiterten Funktionen kann es testen, ob ein String mit einem Wildcard-Muster übereinstimmt (nicht in busybox sh ). -
if ((condition))
Noch ein ksh Erweiterung, die bash und zsh auch unterstützen. Dies führt Arithmetik durch. Als Ergebnis der Arithmetik wird ein Exit-Code gesetzt und der
if
Anweisung wirkt entsprechend. Es gibt einen Beendigungscode von Null (wahr) zurück, wenn das Ergebnis der arithmetischen Berechnung nicht Null ist. Wie[[...]]
, dieses Formular ist nicht POSIX und daher nicht portierbar. -
if (command)
Dies führt den Befehl in einer Subshell aus. Wenn der Befehl abgeschlossen ist, setzt er einen Exit-Code und den
if
Anweisung wirkt entsprechend.Ein typischer Grund für die Verwendung einer Subshell wie dieser besteht darin, Nebeneffekte von
command
zu begrenzen ifcommand
erforderliche Variablenzuweisungen oder andere Änderungen an der Umgebung der Shell. Solche Änderungen bleiben nach Abschluss der Subshell nicht erhalten. -
if command
Befehl ausgeführt und der
if
Die Anweisung handelt gemäß ihrem Exit-Code.