[ "$VAR" = "" ] 和 [ -z "$VAR" ] 总是等价的吗?

[ "$VAR" = "" ] 和 [ -z "$VAR" ] 总是等价的吗?

我的代码看起来像这样:

VAR=""

while [ -z "$VAR" ]; do
  VAR=$( command | grep "important_string" )
done

所以我想轮询 , 的输出command,直到important_string出现并放入$VAR.

[ -z "$VAR" ]和之间有功能区别吗[ "$VAR" = "" ]

答案1

是的,它们([ -z "$VAR" ][ "$VAR" = "" ]...)是等价的。两者都在测试 的空性$VAR(例如,当它未绑定或设置为空字符串时)。

正如评论者塞拉达[ "$VAR" = "" ] ,当使用ifVAR是一些有效的测试(例如 if VARis )时,可能会发生不好的事情-z,特别是当[(or test) 是不是一个内置的 shell。但 onbashzshthe[是内置函数,这似乎不是问题。您可以用于[ "x$VAR" = "x" ]您的测试。看测试(1)

当然,我假设有一些 POSIX shell 或类似的东西。

也许-z可能会稍微快一些(但您不应该关心 shell 脚本中的微秒),并且您可能会发现它=可能更具可读性。

相关内容