bash [[ = ]] Verhalten

bash [[ = ]] Verhalten

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 manSeite 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 infoSeite:

Bildbeschreibung hier eingeben

verwandte Informationen