在 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
命令需要 then
而 while
命令不需要?为什么不能省略?
while
语法中的 do
与 if
语法中的 then
具有相似的目的。它们都表示语句主体的开始 - 将其与语句的条件部分区分开来。
if conditional statement是shell中的复合语句。语句的 if
和 then
部分作为两个部分执行,仅当 if
部分以 [=18= 的退出状态结束时才调用 then
部分].两个部分都可能包含多个语句;因此,单独使用分号不足以分隔这些部分。
正如@shibley 在他的回答中所说,do
和 then
单词用于指示要执行的操作块的开始。
我做了一些研究,找不到历史原因,所以我要猜测逻辑原因。它可能太主观了,所以不要犹豫,在下面评论你的印象。
bash 语法非常 "symmetrical":只要你有一个 case
,你就用 esac
结束它。而且,它的设计非常人性化,所以很容易理解。
就是说,如果您处于 while
循环中,则意味着您将在条件为真时 做 某事。然后,当它不再正确时,您就 完成了 。
但是,在 if
条件下,您是说如果发生某些事情, 则 需要执行某些事情。
简而言之:do
和 then
是人类可读的方式来指示相同的内容,即要在 while
或上执行的命令块的开头if
条件。
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
命令需要 then
而 while
命令不需要?为什么不能省略?
while
语法中的 do
与 if
语法中的 then
具有相似的目的。它们都表示语句主体的开始 - 将其与语句的条件部分区分开来。
if conditional statement是shell中的复合语句。语句的 if
和 then
部分作为两个部分执行,仅当 if
部分以 [=18= 的退出状态结束时才调用 then
部分].两个部分都可能包含多个语句;因此,单独使用分号不足以分隔这些部分。
正如@shibley 在他的回答中所说,do
和 then
单词用于指示要执行的操作块的开始。
我做了一些研究,找不到历史原因,所以我要猜测逻辑原因。它可能太主观了,所以不要犹豫,在下面评论你的印象。
bash 语法非常 "symmetrical":只要你有一个 case
,你就用 esac
结束它。而且,它的设计非常人性化,所以很容易理解。
就是说,如果您处于 while
循环中,则意味着您将在条件为真时 做 某事。然后,当它不再正确时,您就 完成了 。
但是,在 if
条件下,您是说如果发生某些事情, 则 需要执行某些事情。
简而言之:do
和 then
是人类可读的方式来指示相同的内容,即要在 while
或上执行的命令块的开头if
条件。