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

Han*_*Sun 3 syntax bash shell if-statement

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

if TEST-COMMANDS; then
    CONSEQUENT-COMMANDS;
[elif MORE-TEST-COMMANDS; then
  MORE-CONSEQUENTS;]
[else ALTERNATE-CONSEQUENTS;]
fi
Run Code Online (Sandbox Code Playgroud)

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

while TEST-COMMANDS; do CONSEQUENT-COMMANDS; done
Run Code Online (Sandbox Code Playgroud)

我想知道为什么then需要if命令而不是while命令?为什么不能省略?

shi*_*ley 5

dowhile语法类似用途用于thenif语法.它们都表示声明正文的开头 - 将其与声明的条件部分区分开来.

如果条件语句是在外壳是复合语句.语句的if&then部分作为两部分执行,then只有当if部分以退出状态结束时才调用该部分0.两个部分都可能包含多个陈述; 因此,单独的分号不足以分离这些部分.

  • 换句话说:分号是*命令*终止符,就像它在其他地方一样,而不是*condition*终止符.`then`是*条件*终止符. (6认同)
  • @ user2864740不,不是.`如果是真的; 真正; 假; 然后回声嗨; 别的回音; fi`是一个有效的表达.bash如何知道条件的结束?`then`. (4认同)
  • @ user2864740不,不是.条件可以是多个命令:`if var = $(mycmd); test -n"$ var"; 然后是真的; fi`.这在循环中非常有用.他们本可以为`if`语句添加一个特殊情况,因此你可以避免使用`then`,但在语法中一致性是一件好事. (4认同)
  • `;`(命令/表达式中断)足以"区分[e]它与条件部分".*要求*`then`的推理是可疑的. (2认同)