Linux Bash有do-while循环吗?

9

在互联网上搜索了一下,似乎Bash没有do-while循环。

这是正确的吗?是否有可靠的来源来确认这一点(没有证据表明不存在do-while循环,并不是不存在的论点,也许只是不太流行的陈述)?

是否可以自己定义指令,从而实现do-while循环呢?有一种算法方法可以将do-while循环转换为while循环,但这不是本问题的范围。


3
请参见:https://dev59.com/sWQn5IYBdhLWcg3w5aey - Bruno Ribeiro
2个回答

36

bash(或者一般的 Posix shell)没有显式的语法来表示后测试循环(通常称为“do-while”循环),因为这样的语法是冗余的。 while 复合语句允许你编写前测试、后测试或中间测试循环,所有这些循环都具有相同的语法。

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

while 循环的格式如下:

while compound-list-1
do
  compound-list-2
done

执行复合列表1,如果它的退出状态非零,则while命令将完成。否则,将执行复合列表2,并重复该过程。

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

这意味着您可以将while循环视为以下方式编写:

while
  optional-pre-test-compound-list
  condition
do
  post-test-compound-list
done

也就是说,条件语句不一定紧跟在while关键字之后。因此,与C语法等效的写法为:

do statements while (test);
while statements; test do :; done

dodone之间必须有一个:,因为shell语法不允许空语句。由于:不是元字符,所以它前后必须有空格或元字符;否则,它将被解析为前面或后面的标记的一部分。由于它被解析为命令,所以它还需要一个分号或换行符;否则done将被视为:的参数。


4

不,Bash没有do-while循环。在手册的章节3.2.4.1 循环结构中列出了untilwhilefor。请注意,没有do-while


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接