strings not equal else different bash string-comparison

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.