Diferença entre [[$ variable]] e [[-n $ variable]]?

8

No bash, [[ $variable ]] e [[ -n $variable ]] são completamente equivalentes? Parece ser o caso a julgar pela saída abaixo, mas vejo ambas as formas de uso predominantes em scripts de shell.

$ z="abra"
$ [[ $z ]]
$ echo $?
0
$ [[ -n $z ]]
$ echo $?
0
$ z=""
$ [[ $z ]]
$ echo $?
1
$ [[ -n $z ]]
$ echo $?
1
$ unset z
$ [[ $z ]]
$ echo $?
1
$ [[ -n $z ]]
$ echo $?
1
    
por iruvar 30.01.2013 / 19:25

2 respostas

4

[ "$var" ] é equivalente a [ -n "$var" ] no bash e na maioria dos shells hoje em dia. Em outros shells antigos, eles devem ser equivalentes, mas sofrem de diferentes bugs para alguns valores especiais de "$ var" como = , ( ou ! .

Acho [ -n "$var" ] mais legível e é o pingente de [ -z "$var" ] .

[[ -n $var ]] é o mesmo que [[ $var ]] em todas as shells onde a sintaxe do ksh não padrão é implementada.

test "x$var" != x seria o mais confiável se você quiser ser portável para shells muito antigos.

    
por 30.01.2013 / 21:34
1

De acordo com Teste para uma string de tamanho diferente de zero no bash: [-n “$ var”] ou [“$ var”] , sim, eles são equivalentes.

Eles são equivalentes até mesmo citando o nome da variável.

Importante notar : o nome da questão que cito se refere apenas a [ , mas a resposta considera tanto [ como [[ .

    
por 30.01.2013 / 20:29

Tags