Linux Bash 是否有 do-while 循环?
Does Linux Bash have a do-while loop?
在 Internet 上进行一些搜索后,Bash 似乎没有 do-while 循环。
这是正确的吗?是否有可靠的来源来证实这一点(缺乏证据表明存在 do-while 循环并不是说没有,也许声明只是 不受欢迎)?
是否可以自己定义指令并实现 do-while 循环?有一种算法方法可以将 do-while 循环转换为 while 循环,但这是 not本题范围
否,bash 没有 do-while
循环。 manual section 3.2.4.1 Looping Constructs 列出 until
、while
和 for
。 注意没有do-while
.
bash
(或一般的 Posix shell)没有明确的 post 测试循环语法(通常称为 "do-while" loop) 因为语法是多余的。 while
复合语句允许您使用相同的语法编写预测试、post-测试或中期测试循环。
这是 shell while
循环的语义,来自 Posix:
The format of the while loop is as follows:
while compound-list-1
do
compound-list-2
done
The compound-list-1 shall be executed, and if it has a non-zero exit status, the while command shall complete. Otherwise, the compound-list-2 shall be executed, and the process shall repeat.
一个"compound list"是一个命令序列;复合列表的退出状态是列表中最后一个命令的退出状态。
这意味着你可以认为一个 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
被视为 :
.
的参数
在 Internet 上进行一些搜索后,Bash 似乎没有 do-while 循环。
这是正确的吗?是否有可靠的来源来证实这一点(缺乏证据表明存在 do-while 循环并不是说没有,也许声明只是 不受欢迎)?
是否可以自己定义指令并实现 do-while 循环?有一种算法方法可以将 do-while 循环转换为 while 循环,但这是 not本题范围
否,bash 没有 do-while
循环。 manual section 3.2.4.1 Looping Constructs 列出 until
、while
和 for
。 注意没有do-while
.
bash
(或一般的 Posix shell)没有明确的 post 测试循环语法(通常称为 "do-while" loop) 因为语法是多余的。 while
复合语句允许您使用相同的语法编写预测试、post-测试或中期测试循环。
这是 shell while
循环的语义,来自 Posix:
The format of the while loop is as follows:
while compound-list-1
do
compound-list-2
done
The compound-list-1 shall be executed, and if it has a non-zero exit status, the while command shall complete. Otherwise, the compound-list-2 shall be executed, and the process shall repeat.
一个"compound list"是一个命令序列;复合列表的退出状态是列表中最后一个命令的退出状态。
这意味着你可以认为一个 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
被视为 :
.