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

fir*_*ird 2 linux bash

我有以下 bash 脚本:

while [ $loop == "true" ]
   do
     //do stuff
   done
Run Code Online (Sandbox Code Playgroud)

但它在 [.

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

Jde*_*eBP 5

M. Vazquez-Abrams 说得很对。这与引号将已经是字符串的东西变成字符串无关,也与一些错误的想法无关,即=inbash的内置[命令不是字符串比较。(阅读 Bash 用户手册的第 6.4 节,伙计们!)这与字段拆分将单词转换为字段后空字段发生的情况有关。

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

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

[ $loop = true ]
扩展到四个领域

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

[命令需要五个语法正确时:

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

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

同样,所有这些都在 Bash 用户手册的第 3.5 节和第 3.5.7 节中。手册是您的朋友。