No bash, são [[ $variable ]]
e [[ -n $variable ]]
completamente equivalentes? Parece ser o caso a julgar pela saída abaixo, mas vejo as duas formas de uso predominantes nos 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
[[ -n $(echo -ne "\0") ]]; echo $?
e[ -n $(echo -ne "\0") ]; echo $?
diferem[ -n ]
a mesma[ -n -n ]
. Em shells diferentes de zsh, os argumentos de comando (mesmo embutidos) ou variáveis de shell não podem conter caracteres NUL.Respostas:
[ "$var" ]
é equivalente ao[ -n "$var" ]
bash e à maioria dos shells atualmente. Em outros shells mais antigos, eles devem ser equivalentes, mas sofrem bugs diferentes 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 todos os shells em que a sintaxe ksh não padrão é implementada.test "x$var" != x
seria o mais confiável se você quiser ser portátil a conchas muito antigas.fonte
De acordo com Teste para uma sequência de comprimento diferente de zero no bash: [-n "$ var"] ou ["$ var"] , sim, eles são equivalentes.
Eles são equivalentes, mesmo citando o nome da variável.
Importante notar : o nome da pergunta que cito se refere apenas
[
, mas a resposta considera ambos[
e[[
.fonte
[[]]
não é o equivalente de[]
:)