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

ras*_*hok 2 linux bash shell while-loop

我在bash中循环使用单行无限,并尝试在条件循环时添加单行.下面我提到了我的命令,它给出了意想不到的结果(假设在2次迭代后停止,但它永远不会停止.并且它还将变量I视为可执行文件).

命令:

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

输出:

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 ....
...
...
Run Code Online (Sandbox Code Playgroud)

注意:我在Ubuntu 14.04上运行它

Ini*_*ian 8

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

bash使用算术运算符(参见算术表达式)时,

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

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

while((i++ < 2)); do echo hi; sleep 1; done
Run Code Online (Sandbox Code Playgroud)

POSIX-LY

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

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