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

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

在 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

答案1

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

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

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

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

答案2

根据在 bash 中测试非零长度字符串:[ -n “$var” ] 或 [ “$var” ],是的,它们是等价的。

即使引用变量的名称,它们也是等效的。

重要注意事项:我引用的问题名称仅指的是[,但答案考虑了[[[

相关内容