我的代码看起来像这样:
VAR=""
while [ -z "$VAR" ]; do
VAR=$( command | grep "important_string" )
done
Run Code Online (Sandbox Code Playgroud)
所以我想轮询 , 的输出command,直到important_string出现并放入$VAR.
有没有之间的功能差异[ -z "$VAR" ]和[ "$VAR" = "" ]?
是的,它们([ -z "$VAR" ]和[ "$VAR" = "" ]...)是等价的。两者都在测试是否为空$VAR(例如,当它未绑定或设置为空字符串时)。
正如Celada所评论的,当使用[ "$VAR" = "" ] ifVAR是一些有效的测试(例如 if VARis -z)时可能会发生不好的事情,特别是当[(or test)不是内置的 shell 时。但是 on bashor zshthe [is a builtin,这似乎不是问题。你可以[ "x$VAR" = "x" ]用于你的测试。见测试(1)
当然,我假设一些 POSIX shell 或类似的东西。
也许-z可能会稍微快一点(但您不应该关心 shell 脚本中的微秒)并且您可能会发现=可能更具可读性。