comportamiento de bash [[ = ]]

comportamiento de bash [[ = ]]

man bash:

[[ expresión ]]
[...] Las expresiones se componen de los primarios que se describen a continuación en EXPRESIONES CONDICIONALES. La división de palabras y la expansión de nombres de ruta no se realizan en las palabras entre [[ y ]];
[...] Cuando se utilizan los operadores == y !=, la cadena a la derecha del operador se considera un patrón y se compara de acuerdo con las reglas que se describen a continuación en Coincidencia de patrones.

=En todo el apartado no se menciona el caso de un solo .

EXPRESIONES CONDICIONALES
[...]
cadena1 == cadena2
cadena1 = cadena2
Verdadero si las cadenas son iguales. = debe usarse con el comando de prueba para la conformidad con POSIX.

De esta descripción esperaría que

[[ a = $cmpstring ]]

comprueba si hay cadenas iguales y

[[ a == $cmpstring ]]

comprueba si hay una coincidencia de patrón. Pero ese no es el caso:

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

¿Entiendo mal algo o la página de manual de bash simplemente se olvidó de mencionarlo =?

Respuesta1

=Es el mismo que ==cuando está dentro [[...]]. Según la manpágina más reciente, en SHELL GRAMMAR> Compound Commands> [[ expression ]]:

The = operator is equivalent to ==

y más abajo, bajo 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:

ingrese la descripción de la imagen aquí

información relacionada