Linux Bash是否有do-while循环?

Wil*_*sem 7 linux bash do-while

在互联网上进行一些搜索之后,看起来Bash没有do-while循环.

它是否正确?是否有可靠的来源来证实这一点(缺乏证据表明有一个do-while循环不是一个没有一个参数的论证,也许一个陈述只是不受欢迎)?

是否可以自己定义指令,从而实现do-while循环?还有就是要变换的算法的方式做,而在-loop -loop,但这不是这个问题的范围.

ric*_*ici 28

bash(或一般的Posix shell)没有明确的后测试循环语法(通常称为"do-while"循环),因为语法是多余的.该while复合语句可以让你写预测试,测试后或中试循环,都具有相同的语法.

这是while来自Posix的shell 循环的语义:

while循环的格式如下:

while compound-list-1
do
  compound-list-2
done
Run Code Online (Sandbox Code Playgroud)

应执行复合列表-1,如果它具有非零退出状态,则while命令应完成.否则,应执行复合列表-2,并重复该过程.

"复合列表"是一系列命令; 复合列表的退出状态是列表中最后一个命令的退出状态.

这意味着您可以将while循环视为如下所示:

while
  optional-pre-test-compound-list
  condition
do
  post-test-compound-list
done
Run Code Online (Sandbox Code Playgroud)

也就是说,不要求要测试的条件紧跟在while关键字之后.所以相当于C语法:

do statements while (test);
Run Code Online (Sandbox Code Playgroud)

while statements; test do :; done
Run Code Online (Sandbox Code Playgroud)

:该做和做之间是必需的,因为shell语法不允许空语句.既然:不是元字符,它必须在它之前和之后都有空格或元字符; 否则,它将被解析为前一个或后一个令牌的一部分.因为它被解析为一个命令,所以它后面还需要一个分号或换行符; 否则done被视为参数:.