[
ist ein Shell-Befehl in bash und in zsh:
$ type [
[ is a shell builtin
Aus der Dokumentation zu Shell Builtin Commands :
Eingebaute Befehle sind in der Shell selbst enthalten . Wenn der Name eines eingebauten Befehls als erstes Wort eines einfachen Befehls verwendet wird (siehe Einfache Befehle ), führt die Shell den Befehl direkt aus, ohne ein anderes Programm aufzurufen. Eingebaute Befehle sind erforderlich, um Funktionen zu implementieren, die mit separaten Dienstprogrammen nicht oder nur ungünstig verfügbar sind.
Die offizielle Dokumentation ( $ help test
) erlaubt nur die Verwendung von =
:
STRING1 = STRING2
True, wenn die Zeichenfolgen gleich sind.
Der richtige Ausdruck wäre also:
$ [ "a" = "a" ] && echo yes
yes
Was passiert ist, dass Bash etwas weniger streng ist. Die Unterstützung des ==
Bedieners mit [
scheint eine Bash-Erweiterung zu sein, und es wird nicht empfohlen, sie zu verwenden:
string1 == string2
string1 = string2
True, wenn die Zeichenfolgen gleich sind. Bei Verwendung mit dem Befehl [[führt dies einen Mustervergleich wie oben beschrieben durch (siehe Bedingte Konstrukte ).
'=' sollte mit dem Testbefehl für die POSIX-Konformität verwendet werden.
Wenn Sie verwenden möchten ==
, sollten Sie das [[
Schlüsselwort verwenden:
$ [[ "a" == "a" ]] && echo yes
yes
Beachten Sie, dass dies [[
weniger portabel ist (nicht POSIX). Aber sowohl bash als auch zsh unterstützen es.
$PATH
durchsucht wurde. und==
ist keine gültigetest
Syntax für den/usr/bin/[
Weg. Ist einfach=
in Ordnung.