bash [[=]] comportamento

4

man bash :

[[ expression ]]
[...] Expressions are composed of the primaries described below under CONDITIONAL EXPRESSIONS. Word splitting and pathname expansion are not performed on the words between the [[ and ]];
[...] When the == and != operators are used, the string to the right of the operator is considered a pattern and matched according to the rules described below under Pattern Matching.

Em toda a seção, o caso de um único = não é mencionado.

CONDITIONAL EXPRESSIONS
[...]
string1 == string2
string1 = string2
True if the strings are equal. = should be used with the test command for POSIX conformance.

A partir dessa descrição, esperaria que

[[ a = $cmpstring ]]

verifica se há sequências iguais e

[[ a == $cmpstring ]]

verifica se há uma correspondência de padrões. Mas esse não é o caso:

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

Eu não entendi mal ou a página man bash esqueceu de mencionar = ?

    
por Hauke Laging 07.01.2015 / 22:07

1 resposta

7

= é o mesmo que == quando dentro de [[...]] . De acordo com a mais recente página 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 page:

    
por 07.01.2015 / 23:07

Tags