Aqui está um exemplo que deve demonstrar a diferença
~$ t="alfa beta"
~$ if [ -n $t ] ; then echo OK ; fi
bash: [: alfa: binary operator expected
~$ if [ -n "$t" ] ; then echo OK ; fi
OK
~$ ls blah*
blah1 blah2 blah3
~$ t="blah*"
~$ if [ -n "$t" ] ; then echo OK ; fi
OK
~$ if [ -n $t ] ; then echo OK ; fi
bash: [: too many arguments
Em outras palavras, com aspas, o $t
é expandido apenas uma vez e colocado aspas como um único argumento para test
( [
é apenas um alias para test
). Sem as aspas, ele é substituído pelo conteúdo de $t
e, em seguida, expandido novamente .