bash [[ [a] == [a] ]] not true? square bracket affect compare result

  • A+

Anyone know why this happens? Is this a bug of bash?

x='mnt:[4026532411]'  [[ $x == $x ]] && echo OK 

I am expecting result OK, but it did not.

Of course, this works

[[ "$x" == "$x" ]] && echo OK 

But as I know, bash [[ ]] have a merit that no need to quote var when compare.

x='a b' [[ $x == $x ]] && echo OK 


Ironical things is

x='mnt:[4026532411]'  [[ $x != $x ]] && echo Oh my god 

result is Oh my god


The unquoted right-hand side of == and != is treated as a pattern, not a literal string. mnt:[4026532411] will match mnt: followed by exactly one of 0, 1, 2, 3, 4, 5, or 6, since the patterns mnt:[4026532411] and mnt:[0123456] are equivalent. To match the lieral string, you need to quote the expansion.

x='mnt:[4026532411]'  [[ $x == "$x" ]] && echo OK 


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: