Dans Bash (et ksh et zsh), si vous utilisez des doubles crochets, vous n'avez pas besoin de mettre entre guillemets les variables pour éviter qu'elles ne soient nulles ou non définies.
$ 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
Il y a d'autres avantages.
Placez la variable entre guillemets.
if [ "$TESTVAR" == "foo" ]
si vous faites cela et que la variable est vide, le test se développe en :
if [ "" == "foo" ]
alors que si vous ne le mettez pas entre guillemets, il se développe en :
if [ == "foo" ]
qui est une erreur de syntaxe.