not - bash[[[a]==[a]]] no es cierto? corchete afecta el resultado de la comparación
linux bash if string not equal (2)
El lado derecho no citado de ==
y !=
Se trata como un patrón, no como una cadena literal. mnt:[4026532411]
coincidirá con mnt:
seguido de exactamente uno de 0, 1, 2, 3, 4, 5 o 6, ya que los patrones mnt:[4026532411]
y mnt:[0123456]
son equivalentes. Para que coincida con la cadena de caracteres, debe citar la expansión.
x=''mnt:[4026532411]''
[[ $x == "$x" ]] && echo OK
Alguien sabe por qué pasa esto? ¿Es este un error de bash?
x=''mnt:[4026532411]''
[[ $x == $x ]] && echo OK
Estoy esperando el resultado OK
, pero no lo hizo.
Claro que esto funciona
[[ "$x" == "$x" ]] && echo OK
Pero como sé, bash [[]] tiene un mérito que no necesita citar var cuando se compara.
x=''a b''
[[ $x == $x ]] && echo OK
trabajos.
Cosas irónicas es
x=''mnt:[4026532411]''
[[ $x != $x ]] && echo Oh my god
el resultado es Oh mi dios
Lo que estás viendo es hacer esta oración desde la página de manual de bash
:
Cuando se utilizan los operadores == y! =, La cadena a la derecha del operador se considera un patrón y se empareja de acuerdo con las reglas que se describen a continuación en Coincidencia de patrones, como si la opción de shell extglob estuviera habilitada.
Como ya sabrá, en el [...]
shell se pueden realizar coincidencias de un grupo de caracteres. Es decir, dados los archivos:
$ ls
fileA fileB fileC fileD
Ejecutar el ls file[AB]
producirá:
fileA fileB
Entonces en su expresión, mnt:[1234]
se interpreta de manera similar.