Linux Bash是否有do-while循环?

参见英文答案 > Emulating a do-while loop in Bash3个
在互联网上进行一些搜索之后,看起来Bash没有do-while循环.

它是否正确?有没有可靠的来源来证实这一点(缺乏证据表明有一个do-while循环不是没有一个的论证,也许一个陈述只是不受欢迎)?

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

解决方法

bash(或一般的Posix shell)没有明确的后测试循环语法(通常称为“do-while”循环),因为语法是多余的. while复合语句允许您编写预测试,后测试或中间测试循环,所有这些都使用相同的语法.

这是从Posix开始的shell while循环的语义:

The format of the while loop is as follows:

@H_404_17@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.

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

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

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

也就是说,不要求要立即测试的条件遵循while关键字.所以相当于C语法:

@H_404_17@do statements while (test);

@H_404_17@while statements; test do :; done

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

相关文章

文件查找(find) 1 find 简单的说,就是实时查找指定的内容或条件。特点:最新、最快、最准确。 用法:...
非交互式添加分区 方法一 添加/deb/sdb 下的分区,其实位置为1到1000M,第二个分区位置为1001至3000M,...
编译安装httpd 1 去官网下载源码包 为避免非法软件,一定要去官网下载http://www.apache.org httpd-2.4...
gdisk用法 gdisk - InteractiveGUIDpartitiontable (GPT) manipulator GPTfdisk (akagdisk) isatext-mo...
1 一定用快捷键 这里简单的说下几个常用的快捷按键。 1.1 移动光标快捷键 Crtl + a 光标回到命令行...
bash shell中测试命令 test命令提供了if-than语句中测试不同条件的途径。如果test命令中列出的条件成立...