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 man
pá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 info
página: