man bash
:
[[expressão]]
[...] As expressões são compostas pelas primárias descritas abaixo em EXPRESSÕES CONDICIONAIS. A divisão de palavras e a expansão do nome do caminho não são executadas nas palavras entre [[ e ]];
[...] Quando os operadores == e! = são usados, a string à direita do operador é considerada um padrão e correspondida de acordo com as regras descritas abaixo em Correspondência de padrões.
Em toda a seção o caso de um único =
não é mencionado.
EXPRESSÕES CONDICIONAIS
[...]
string1 == string2
string1 = string2
Verdadeiro se as strings forem iguais. = deve ser usado com o comando test para conformidade com POSIX.
A partir desta descrição eu esperaria que
[[ a = $cmpstring ]]
verifica se há strings iguais e
[[ a == $cmpstring ]]
verifica se há uma correspondência de padrão. Mas esse não é o caso:
> [[ a == ? ]]; echo $?
0
> [[ a = ? ]]; echo $?
0
> [[ a == "?" ]]; echo $?
1
Eu entendi algo errado ou a página de manual do bash simplesmente esqueceu de mencionar =
?
Responder1
=
é o mesmo que ==
quando dentro [[...]]
. De acordo com a página mais recente man
, em SHELL GRAMMAR
> Compound Commands
> [[ expression ]]
:
The = operator is equivalent to ==
e mais abaixo, em 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
página: