In der bash sind [[ $variable ]]
und [[ -n $variable ]]
völlig gleichwertig? Nach der folgenden Ausgabe scheint dies der Fall zu sein, aber ich sehe beide Verwendungsformen in Shell-Skripten.
$ 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 $?
und[ -n $(echo -ne "\0") ]; echo $?
unterscheiden sich[ -n ]
dieselbe war[ -n -n ]
. In anderen Shells als zsh dürfen Befehlsargumente (auch integrierte Argumente) oder Shell-Variablen keine NUL-Zeichen enthalten.Antworten:
[ "$var" ]
ist gleichbedeutend mit[ -n "$var" ]
Bash und den meisten Muscheln heutzutage. In anderen älteren Schalen sind sie gleichwertig sein sollen, aber aus verschiedenen Bugs leiden für einige spezielle Werte von „$ var“ wie=
,(
oder!
.Ich finde
[ -n "$var" ]
besser lesbar und ist der Anhänger von[ -z "$var" ]
.[[ -n $var ]]
ist dasselbe wie[[ $var ]]
in allen Shells, in denen diese nicht standardmäßige ksh-Syntax implementiert ist.test "x$var" != x
wäre am zuverlässigsten, wenn Sie auf sehr alte Muscheln tragbar sein möchten.quelle
Laut Test für Zeichenfolgen ungleich Null in Bash: [-n “$ var”] oder [“$ var”] sind sie äquivalent.
Sie sind gleichwertig und geben sogar den Namen der Variablen an.
Wichtig zu beachten : Der Name der Frage, die ich zitiere, bezieht sich nur auf
[
, aber die Antwort berücksichtigt sowohl[
als auch[[
.quelle
[[]]
ist nicht das Äquivalent von[]
:)