在互联网上搜索了一下,似乎Bash没有do-while循环。
这是正确的吗?是否有可靠的来源来确认这一点(没有证据表明不存在do-while循环,并不是不存在的论点,也许只是不太流行的陈述)?
是否可以自己定义指令,从而实现do-while循环呢?有一种算法方法可以将do-while循环转换为while循环,但这不是本问题的范围。
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
在do
和done
之间必须有一个:
,因为shell语法不允许空语句。由于:
不是元字符,所以它前后必须有空格或元字符;否则,它将被解析为前面或后面的标记的一部分。由于它被解析为命令,所以它还需要一个分号或换行符;否则done
将被视为:
的参数。