[ in bash is a synomym for test but it's not still a builtin. For backward compatibility, it behaves similarly to /usr/bin/[ , which means variables among its arguments are still expanded by the shell, which is not true for [[ . In other words, you have to write things like
if [ "$x" = abc ]
i.e. you need to quote the variables, while with `[[` you don't have to, as the shell processes the parameters before expansion:
if [[ $x = abc ]]
Also, `[[` introduces pattern matching [[ $x = ab* ]] and `=~` you might now from Perl.
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
| [reply] [d/l] [select] |