поведение bash [[ = ]]

поведение bash [[ = ]]

man bash:

[[ выражение ]]
[...] Выражения состоят из основных элементов, описанных ниже в разделе УСЛОВНЫЕ ВЫРАЖЕНИЯ. Разбиение слов и расширение имени пути не выполняются для слов между [[ и ]];
[...] При использовании операторов == и != строка справа от оператора считается шаблоном и сопоставляется в соответствии с правилами, описанными ниже в разделе Сопоставление с шаблоном.

В целом разделе случай единичного случая =не упоминается.

УСЛОВНЫЕ ВЫРАЖЕНИЯ
[...]
string1 == string2
string1 = string2
Истина, если строки равны. = следует использовать с командой test для соответствия POSIX.

Из этого описания я бы ожидал, что

[[ a = $cmpstring ]]

проверяет наличие одинаковых строк и

[[ a == $cmpstring ]]

проверяет соответствие шаблону. Но это не так:

> [[ a == ? ]]; echo $?
0
> [[ a = ? ]]; echo $?
0
> [[ a == "?" ]]; echo $?
1

Я что-то не понимаю или на странице руководства bash просто забыли об этом упомянуть =?

решение1

=то же самое, что ==и внутри [[...]]. Согласно более поздней manстранице, под SHELL GRAMMAR> Compound Commands> [[ expression ]]:

The = operator is equivalent to ==

и далее ниже, под 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страница:

введите описание изображения здесь

Связанный контент