En bash, ¿son [[ $variable ]]
y [[ -n $variable ]]
completamente equivalentes? Parece ser el caso a juzgar por el resultado a continuación, pero veo que ambas formas de uso prevalecen en los 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 $?
y[ -n $(echo -ne "\0") ]; echo $?
difieren[ -n ]
lo mismo[ -n -n ]
. En shells que no sean zsh, los argumentos de comando (incluso los incorporados) o las variables de shell no pueden contener caracteres NUL.Respuestas:
[ "$var" ]
es equivalente a[ -n "$var" ]
bash y la mayoría de las conchas en la actualidad. En otros shells más antiguos, están destinados a ser equivalentes, pero sufren de diferentes errores para algunos valores especiales de "$ var" como=
,(
o!
.Me parece
[ -n "$var" ]
más legible y es el colgante de[ -z "$var" ]
.[[ -n $var ]]
es lo mismo que[[ $var ]]
en todos los shells donde se implementa esa sintaxis ksh no estándar.test "x$var" != x
sería el más confiable si desea ser portátil a conchas muy antiguas.fuente
De acuerdo con la prueba de cadena de longitud distinta de cero en bash: [-n “$ var”] o [“$ var”] , sí, son equivalentes.
Son equivalentes incluso citando el nombre de la variable.
Importante notar : el nombre de la pregunta que cito se refiere solo
[
, pero la respuesta considera ambos[
y[[
.fuente
[[]]
no es el equivalente de[]
:)