在 Bash 中,为什么条件结构中需要 `then`?

In Bash, Why `then` is needed in the conditional constructs?

if 命令的条件结构如下所示:

if TEST-COMMANDS; then
    CONSEQUENT-COMMANDS;
[elif MORE-TEST-COMMANDS; then
  MORE-CONSEQUENTS;]
[else ALTERNATE-CONSEQUENTS;]
fi

while 命令的循环结构如下所示:

while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done

我想知道为什么 if 命令需要 thenwhile 命令不需要?为什么不能省略?

while 语法中的

doif 语法中的 then 具有相似的目的。它们都表示语句主体的开始 - 将其与语句的条件部分区分开来。

if conditional statement是shell中的复合语句。语句的 ifthen 部分作为两个部分执行,仅当 if 部分以 [=18= 的退出状态结束时才调用 then 部分].两个部分都可能包含多个语句;因此,单独使用分号不足以分隔这些部分。

正如@shibley 在他的回答中所说,dothen 单词用于指示要执行的操作块的开始。

我做了一些研究,找不到历史原因,所以我要猜测逻辑原因。它可能太主观了,所以不要犹豫,在下面评论你的印象。

bash 语法非常 "symmetrical":只要你有一个 case,你就用 esac 结束它。而且,它的设计非常人性化,所以很容易理解。

就是说,如果您处于 while 循环中,则意味着您将在条件为真时 某事。然后,当它不再正确时,您就 完成了 。 但是,在 if 条件下,您是说如果发生某些事情, 需要执行某些事情。

简而言之:dothen 是人类可读的方式来指示相同的内容,即要在 while 或上执行的命令块的开头if条件。