bash [[ = ]] comportamento

bash [[ = ]] comportamento

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 infopágina:

insira a descrição da imagem aqui

informação relacionada