Quando você deve enviar variáveis entre aspas em condições booleanas? [fechadas]

0

As duas expressões booleanas a seguir são as mesmas?

if [ -n $1 ] ; then

if [ -n "$1" ] ; then

Se não - Quando você deve colocar uma variável entre aspas?

    
por user784637 30.08.2012 / 18:56

2 respostas

0

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 .

    
por January 30.08.2012 / 19:32
0

Nas condições test , que é o mesmo que [ , você deve sempre usar aspas duplas, caso contrário, o comando test pode perder um argumento se a variável estiver vazia ou indefinida ou tiver muitos argumentos se a variável contém espaço em branco. Em bash , no entanto, é mais seguro usar o [[ incorporado para condições que não precisam das aspas.

    
por choroba 30.08.2012 / 19:02