In der test
Vergangenheit existierte der Befehl zuerst (mindestens bis zur siebten Unix-Ausgabe 1979). Es verwendet die Operatoren =
und !=
Zeichenfolgen zu vergleichen, und -eq
, -ne
, -lt
etc. Zahlen zu vergleichen. Zum Beispiel test 0 = 00
ist falsch, ist aber test 0 -eq 00
wahr. Ich weiß nicht, warum diese Syntax gewählt wurde, aber es könnte sein, dass die Verwendung von <
und >
vermieden wurde, was die Shell als Umleitungsoperatoren analysiert hätte. Der test
Befehl bekam eine andere Syntax ein paar Jahre später: [ … ]
entspricht test …
.
Die [[ … ]]
bedingte Syntax, in dessen Innerem <
und >
können als Betreiber verwendet werden , ohne zu zitieren, wurde später hinzugefügt, in KSH. Es wurde die Abwärtskompatibilität mit beibehalten [ … ]
, daher wurden dieselben Operatoren verwendet, jedoch Zeichenfolgen hinzugefügt <
und >
verglichen (z. B. [[ 9 > 10 ]]
aber [[ 9 -lt 10 ]]
). Weitere Informationen finden Sie unter Verwenden der einfachen oder doppelten Klammer - bash
Arithmetische Ausdrücke kamen auch später als der test
Befehl in der Korn-Shell , irgendwann in den 1980er Jahren. Sie folgten der Syntax der C-Sprache, die in Unix-Kreisen sehr beliebt war. Also benutzten sie die Operatoren von C: ==
für Gleichheit, <=
für weniger oder gleich usw.
Unix Seventh Edition verfügte nicht über arithmetische Ausdrücke, sondern über den expr
Befehl , der auch eine C-ähnliche Syntax für Ganzzahloperationen einschließlich der Vergleichsoperatoren implementierte. In einem Shell-Skript müssen die Zeichen <
und >
in Anführungszeichen gesetzt werden, um sie vor der Shell zu schützen, z . B. if expr 1 \< 2; …
entspricht if test 1 -lt 2; …
. Das Hinzufügen von arithmetischen Ausdrücken zur Shell machte die meisten Verwendungen expr
überflüssig, so dass es heute nicht mehr bekannt ist.
In einem sh-Skript verwenden Sie im Allgemeinen arithmetische Ausdrücke, um einen Ganzzahlwert zu berechnen und Ganzzahlen [ … ]
zu vergleichen.
if [ "$((x + y))" -lt "$z" ]; then …
In einem ksh-, bash- oder zsh-Skript können Sie ((…))
beides verwenden.
if ((x + y < z)); then …
Das [[ … ]]
Formular ist nützlich, wenn Sie Bedingungen verwenden möchten, bei denen es sich nicht um Ganzzahlen handelt.
= != < <= > >=
Saiten vergleichen .1 -eq 01
aber1 != 01
und8 -lt 42
doch8 > 42