经过在互联网上的一些搜索,看起来Bash没有do-while循环。Linux Bash有一个do-while循环吗?
这是正确的吗?有没有可靠的消息来证实这一点(缺乏证据表明有做 - 而循环不是一个参数,没有一个,也许一个声明只有不受欢迎)?
是否可以定义自己的指令,从而实现一个do-while循环?有一个算法的方法来转换一个do-while -loop在,而 -loop,但这是而不是这个问题的范围。
经过在互联网上的一些搜索,看起来Bash没有do-while循环。Linux Bash有一个do-while循环吗?
这是正确的吗?有没有可靠的消息来证实这一点(缺乏证据表明有做 - 而循环不是一个参数,没有一个,也许一个声明只有不受欢迎)?
是否可以定义自己的指令,从而实现一个do-while循环?有一个算法的方法来转换一个do-while -loop在,而 -loop,但这是而不是这个问题的范围。
bash
(或通常的Posix shell)对于后测试循环(通常称为“do-while”循环)没有明确的语法,因为语法是多余的。 while
复合语句允许您使用相同的语法编写预测试,后测或中测循环。
这里的一个壳while
环的语义,从Posix:
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
也就是说,没有要求的条件立即进行测试跟随,而关键字。所以等同于C的语法:
do statements while (test);
是
while statements; test do :; done
DO和要求的完成之间的:
,因为shell语法不允许空语句。由于:
不是元字符,因此它前后必须有空格或元字符;否则,它将被解析为前一个或后一个标记的一部分。因为它的解析为一个命令,它也需要后,分号或换行;否则done
被视为一个参数:
。
尼斯*黑客*。 1 –
@MarkReed或换行。谢谢,修复。 – rici
不,bash没有do-while
循环。 manual部分3.2.4.1 Looping Constructs列表until
,while
和for
。 注意没有do-while
。
见:对'while'声明http://stackoverflow.com/questions/16489809/emulating-do-while-loop-in-bash –