En bash, sont [[ $variable ]]
et [[ -n $variable ]]
complètement équivalents? Cela semble être le cas à en juger par la sortie ci-dessous, mais je vois les deux formes d'utilisation répandues dans les scripts 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 $?
et[ -n $(echo -ne "\0") ]; echo $?
diffèrent[ -n ]
la même[ -n -n ]
. Dans les shells autres que zsh, les arguments de commande (même intégrés) ou les variables de shell ne peuvent pas contenir de caractères NUL.Réponses:
[ "$var" ]
équivaut à[ -n "$var" ]
bash et à la plupart des shells de nos jours. Dans d'autres shells plus anciens, ils sont censés être équivalents, mais souffrent de bogues différents pour certaines valeurs spéciales de "$ var" comme=
,(
ou!
.Je trouve
[ -n "$var" ]
plus lisible et c'est le pendentif de[ -z "$var" ]
.[[ -n $var ]]
est le même que[[ $var ]]
dans tous les shells où cette syntaxe ksh non standard est implémentée.test "x$var" != x
serait le plus fiable si vous voulez être portable sur de très vieilles coquilles.la source
Selon Test pour une chaîne de longueur non nulle dans bash: [-n “$ var”] ou [“$ var”] , oui, ils sont équivalents.
Ils sont équivalents même en citant le nom de la variable.
Important à noter : le nom de la question que je cite ne fait référence qu'à
[
, mais la réponse tient compte des deux[
et[[
.la source
[[]]
n'est pas l'équivalent de[]
:)