我有以下 bash 脚本:
while [ $loop == "true" ]
do
//do stuff
done
Run Code Online (Sandbox Code Playgroud)
但它在 [.
这也作为守护进程运行,当停止参数传递给脚本时......循环应该。我猜将 $loop 设置为 false 会自动结束循环。
M. Vazquez-Abrams 说得很对。这与引号将已经是字符串的东西变成字符串无关,也与一些错误的想法无关,即=inbash的内置[命令不是字符串比较。(阅读 Bash 用户手册的第 6.4 节,伙计们!)这与字段拆分将单词转换为字段后空字段发生的情况有关。
如果 shell 变量loop为空或 null,则$loop扩展为空字段。字段拆分后,丢弃空字段。请注意,字段拆分和空字段检查先于报价删除。So"$loop"扩展到 field "",它不是空的,因此不会被删除。引号删除后,它是一个空字段,它成为命令的空参数。
该[命令要求其=运算符具有两个操作数,fore 和 aft。其他任何东西都是语法错误。由于删除了一个空字段,单词序列
[ $loop = true ]扩展到四个领域
[=true]当[命令需要五个语法正确时:
[=true]
当然,空字符串不等于四字符字符串true,命令的退出状态非零。
同样,所有这些都在 Bash 用户手册的第 3.5 节和第 3.5.7 节中。手册是您的朋友。