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
страница: