Answers:
是的,它们([ -z "$VAR" ]
和[ "$VAR" = "" ]
...)是等效的。两者都在测试是否为空$VAR
(例如,当它未绑定或设置为空字符串时)。
正如Celada所说,在使用[ "$VAR" = "" ]
if VAR
是一些有效的测试(例如if VAR
is -z
)时,尤其是在[
(或test
)不是内置的shell 时,可能会发生不好的事情。但是on bash
或zsh
the [
是内置函数,这似乎不是问题。您可以使用它[ "x$VAR" = "x" ]
进行测试。参见测试(1)
当然,我假设使用一些POSIX shell或类似的东西。
也许-z
会稍快一些(但是您不应该在shell脚本中关注微秒),并且可能会发现=
它更具可读性。
[ "$VAR" = "" ]
是错误的,因为如果的内容$VAR
以连字符开头,则将导致语法错误,例如,如果$VAR
包含,-z
则它将扩展为[ -z = "" ]
-测试是否=
为空(不是)然后""
视为无关紧要的论点?但是我似乎无法使它以这种方式失败,因为我在阅读了您的回答后尝试了一下!数十年来,我一直在使用诸如[ "x$VAR" = "xfoo" ]
防止特殊字符之类的构造$VAR
,也许是不必要的!
test
没有内置功能的罕见外壳是正确的。
[[
bash之类的关键字混淆了?他们真的不同。---我没有观察到关于test
bash内置变量扩展的任何特殊行为。
zsh
[ "$VAR" = "" ]
更安全-z
。
==
是不正确的语法,但可以在许多shell中使用(大概是因为使用任何其他语言的人都对它记忆犹新)。您应该使用=
。