man bash
:
[[Ausdruck ]]
[...] Ausdrücke bestehen aus den unten unter BEDINGTE AUSDRÜCKE beschriebenen Primärwerten. Worttrennung und Pfadnamenerweiterung werden nicht für die Wörter zwischen [[ und ]] durchgeführt;
[...] Wenn die Operatoren == und != verwendet werden, wird die Zeichenfolge rechts vom Operator als Muster betrachtet und gemäß den unten unter Mustervergleich beschriebenen Regeln abgeglichen.
Im gesamten Abschnitt =
wird der Fall eines Singles nicht erwähnt.
BEDINGTE AUSDRÜCKE
[...]
string1 == string2
string1 = string2
Wahr, wenn die Zeichenfolgen gleich sind. = sollte mit dem Testbefehl für POSIX-Konformität verwendet werden.
Aus dieser Beschreibung erwarte ich, dass
[[ a = $cmpstring ]]
prüft auf gleiche Zeichenfolgen und
[[ a == $cmpstring ]]
prüft, ob ein Muster übereinstimmt. Das ist aber nicht der Fall:
> [[ a == ? ]]; echo $?
0
> [[ a = ? ]]; echo $?
0
> [[ a == "?" ]]; echo $?
1
Habe ich etwas falsch verstanden oder wurde auf der Bash-Manpage einfach vergessen, es zu erwähnen =
?
Antwort1
=
ist das gleiche wie ==
drinnen [[...]]
. Laut der neueren man
Seite unter SHELL GRAMMAR
> Compound Commands
> [[ expression ]]
:
The = operator is equivalent to ==
und weiter unten unter CONDITIONAL EXPRESSIONS
:
string1 == string2
string1 = string2
True if the strings are equal. = should be used with the test command
for POSIX conformance. When used with the [[ command, this performs pattern
matching as described above (Compound Commands).
bash info
Seite: