在`then`之后命中`enter`和在if条件下命中`;`之间有什么区别

时间:2018-03-24 11:48:47

标签: bash if-statement syntax

如果我在脚本中写这个

if [[ 1 == 1 ]]
 then
   echo "true"
 fi

但是如果我尝试用换新线替换;当使用活动shell时,我得到语法错误

if [[ 1 == 1 ]]; then; echo "true"; fi

为什么?

enterthen

之后点击;之间有什么区别

1 个答案:

答案 0 :(得分:1)

bash manual说:

  

在大多数情况下,复合命令描述中的命令列表可以通过一个或多个换行符与命令的其余部分分开,并且可以后跟换行符代替分号。

As well as

  

if命令的语法是:

if test-commands; then
  consequent-commands;
[elif more-test-commands; then
  more-consequents;]
[else alternate-consequents;]
fi

(我相信上面描述中的格式(多行,缩进)是为了人类读者的利益,而不是正式语法的一部分。也就是说,if test-commands; then consequent-commands; [elif more-test-commands; then more-consequents;] [else alternate-consequents;] fi具有相同的含义。)< / p>

最初的声明说,此描述中的;可以替换为换行符,但反之亦然。

相反,它表示您可以选择在命令列表之前和之后添加换行符,这些换行符将被忽略。

举个例子:

if [[ 1 == 1 ]]
 then
   echo "true"
 fi

此处我们有[[ 1 == 1 ]]测试命令。语法需要;,但由于“后面可能会有换行符代替分号”规则,我们很好(有以下换行符)。

对于then consequent-commands;部分,我们有

 then
   echo "true"

这很好,因为 consequent-commands (即echo "true")“可能与命令的其余部分分开 [即then在这种情况下] 由一个或多个换行符“。

同样,语法下一步需要;,但我们使用新行,正如初始规则所允许的那样。

然后我们到达fi,我们就完成了。