[[ $variable ]] 和 [[ -n $variable ]] 的区别?

iru*_*var 8 shell bash test

在 bash 中,是[[ $variable ]][[ -n $variable ]]完全等价的吗?从下面的输出来看,情况似乎是这样,但我看到两种形式的用法在 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
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 4

[ "$var" ]相当于[ -n "$var" ]现在的 bash 和大多数 shell。在其他较旧的 shell 中,它们是等效的,但对于“$var”的某些特殊值(例如,或 )会遇到不同的错误=(!

我发现[ -n "$var" ]更清晰的是吊坠[ -z "$var" ]

[[ -n $var ]][[ $var ]]与所有实现非标准 ksh 语法的 shell相同。

test "x$var" != x如果您想移植到非常旧的外壳,这将是最可靠的。