LinuxBash是否有do-while循环?

LinuxBash是否有do-while循环?,linux,bash,do-while,Linux,Bash,Do While,在互联网上进行了一些搜索之后,Bash似乎没有do-while循环 这是正确的吗?是否有可靠的来源来证实这一点(没有证据表明存在do-while循环并不是说没有,也许一个声明只是不受欢迎) 是否可以自己定义指令,从而实现do-while循环?有一种算法方法可以在while循环中转换do while循环,但这不是这个问题的范围。不,bash没有do while循环。本节列出了之前的,期间的和的注意没有do-whilebash(或通常的Posix shell)没有测试后循环的显式语法(通常称为“do

在互联网上进行了一些搜索之后,Bash似乎没有do-while循环

这是正确的吗?是否有可靠的来源来证实这一点(没有证据表明存在do-while循环并不是说没有,也许一个声明只是不受欢迎)


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

不,bash没有
do while
循环。本节列出了之前的,
期间的
和的注意没有
do-while

bash
(或通常的Posix shell)没有测试后循环的显式语法(通常称为“do-while”循环),因为语法是多余的。
while
复合语句允许您使用相同的语法编写测试前、测试后或测试中的循环

下面是shell
while
循环的语义,来自:

while循环的格式如下所示:

while
  optional-pre-test-compound-list
  condition
do
  post-test-compound-list
done
应执行复合列表-1,如果其具有非零退出状态,则应完成while命令。否则,应执行化合物-list-2,并重复该过程

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

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

while
  optional-pre-test-compound-list
  condition
do
  post-test-compound-list
done
也就是说,不要求要测试的条件立即跟随while关键字。因此,与C语法等价的是:

do statements while (test);

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

的参数,请参见:
while statements; test do :; done