带有条件的 Bash 单行 while 循环的语法

Posted

技术标签:

【中文标题】带有条件的 Bash 单行 while 循环的语法【英文标题】:Syntax for a Bash single-line while loop with condition 【发布时间】:2018-06-03 03:25:50 【问题描述】:

我在 bash 中浏览了 single line inifinite while loop,并尝试在带有条件的 while 循环中添加一行。下面我提到了我的命令,它给出了意想不到的结果(假设在 2 次迭代后停止,但它永远不会停止。而且它还认为变量 I 是可执行的)。

命令:

i=0; while [ $i -lt 2 ]; do echo "hi"; sleep 1; i = $i + 1; done

输出:

hi
The program 'i' is currently not installed. To run 'i' please ....
hi 
The program 'i' is currently not installed. To run 'i' please ....
hi 
The program 'i' is currently not installed. To run 'i' please ....
...
...

注意:我在 Ubuntu 14.04 上运行它

【问题讨论】:

如果您对i 的特定值进行循环,则不需要while 循环。你想要:for((i=0;i<2;i++)); do ... ; done 【参考方案1】:

bash 特别关注变量赋值中的空格。 shell 将i = $i + 1 解释为命令i,其余的解释为i 的参数,这就是为什么你看到错误是说i 没有安装。

bash 中只需使用算术运算符(参见Arithmetic Expression),

i=0; while [ "$i" -lt 2 ]; do echo "hi"; sleep 1; ((i++)); done

你也可以在循环上下文中使用算术表达式

while((i++ < 2)); do echo hi; sleep 1; done

POSIX-ly

i=0; while [ "$i" -lt 2 ]; do echo "hi"; sleep 1; i=$((i+1)); done

POSIX shell 支持在数学上下文中使用$(( )),这意味着使用 C 整数算术的语法和语义的上下文。

【讨论】:

【参考方案2】:

i=0; while [ $i -lt 2 ]; do echo "hi"; sleep 1; i=$(($i + 1)); done

【讨论】:

以上是关于带有条件的 Bash 单行 while 循环的语法的主要内容,如果未能解决你的问题,请参考以下文章

如果函数内部的条件失败,则跳过 bash while 循环

linux_while及until循环

玩转Bash脚本:循环结构之while循环(转)

Linux基础之bash脚本进阶篇-循环语句(for,while,until)及其特殊用法

Bash之while循环

布尔条件内带有函数的while循环