In Bash (e ksh e zsh), se usi doppie parentesi quadre non hai bisogno di citare le variabili per proteggerle dal fatto che siano nulle o non impostate.
$ if [ $xyzzy == "x" ]; then echo "True"; else echo "False"; fi
-bash: [: ==: unary operator expected
False
$ if [[ $xyzzy == "x" ]]; then echo "True"; else echo "False"; fi
False
Ci sono altri vantaggi.
Racchiudi la variabile tra virgolette.
if [ "$TESTVAR" == "foo" ]
se lo fai e la variabile è vuota, il test si espande in:
if [ "" == "foo" ]
mentre se non lo citi, si espande in:
if [ == "foo" ]
che è un errore di sintassi.