如果变量为真则 bash 脚本循环

如果变量为真则 bash 脚本循环

我有以下 bash 脚本:

while [ $loop == "true" ]
   do
     //do stuff
   done

但它说 [ 有错误。

此外,当将 stop 参数传递给脚本时,它将作为守护进程运行...循环应该会结束。我猜将 $loop 设置为 false 将自动结束循环。

答案1

最好的输入方式是:

while [ "$loop" = "true" ]

请阅读以下 URL 中的“制定测试命令”部分:
http://wiki.bash-hackers.org/syntax/quoting

答案2

M. Vazquez-Abrams 说得对。这与引号无关,引号使事情已经字符串转换为字符串,或者一些错误的想法,认为=inbash的内置[命令不是字符串比较。(大家读读《Bash 用户手册》第 6.4 节吧!)这与字段拆分将单词转换为字段后空字段会发生什么有关。

如果 shell 变量loop为空或为 null,则$loop扩展为空字段。字段拆分后,空字段将被丢弃。请注意,字段拆分和空字段检查先于引号删除。因此"$loop"扩展到字段"",即不是为空,因此不会被删除。删除引号后,它将成为一个空字段,并成为命令的一个空参数。

[命令要求其=操作符有两个操作数,fore 和 aft。其他任何操作数都是语法错误。由于删除了一个空字段,因此单词序列

[ $loop = true ]
扩展为字段

  1. [
  2. =
  3. true
  4. ]

[命令需要从语法上来说是正确的:

  1. [
  2.  
  3. =
  4. true
  5. ]

当然,空字符串不等于四个字符的字符串true,并且命令的退出状态非零。

再次强调,所有这些都在 Bash 用户手册的 §3.5 和 §3.5.7 中。手册是你的朋友。

相关内容