Bash 在“then”和“then”之后按“enter”有什么区别在if条件下

Bash 在“then”和“then”之后按“enter”有什么区别在if条件下,bash,if-statement,syntax,Bash,If Statement,Syntax,如果我把它写在脚本中,它就会运行 if [[ 1 == 1 ]] then echo "true" fi 但是,如果我试图用新的语言来取代新线;当使用活动shell时,我发现语法错误 if [[ 1 == 1 ]]; then; echo "true"; fi 为什么? 在之后点击输入,然后点击和之间有什么区别上面写着: 在大多数情况下,复合命令描述中的命令列表可以用一个或多个换行符与命令的其余部分分开,并且后面可以用换行符代替分号 : if命令的语法为: if test-comm

如果我把它写在脚本中,它就会运行

if [[ 1 == 1 ]]
 then
   echo "true"
 fi
但是,如果我试图用新的语言来取代新线;当使用活动shell时,我发现语法错误

if [[ 1 == 1 ]]; then; echo "true"; fi
为什么?

之后点击
输入
,然后点击
之间有什么区别

上面写着:

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

:

if
命令的语法为:

if test-commands; then
  consequent-commands;
[elif more-test-commands; then
  more-consequents;]
[else alternate-consequents;]
fi
这里有
[[1==1]]
的测试命令。语法需要一个
,但由于“后面可能跟一个换行符来代替分号”规则,我们很好(后面有一个换行符)

对于
然后是后续命令部分,我们有

 then
   echo "true"
这很好,因为后续命令(即
回显“true”
)“可以通过一条或多条换行线与命令的其余部分分离[即
然后在这种情况下

同样,语法需要一个
next,但是我们使用了一个换行符,这是初始规则允许的


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

然后
后面不应该有分号。这有点像
if(newline)[[1==1]]…
if的意思不同;[[1==1]]…
。从技术上讲,您不需要
完全正确。您甚至可以交互地使用多行;然后命令;[elif命令;然后是命令;]。。。[else命令;]fi
您可以用换行符替换任何空格和分号。相反,您不能用分号替换每一个换行符。这里有一个正式语法(用于Posix shell):当您阅读该语法时,您将看到非终结符
换行符
分隔符
;第一个是可选的换行符序列,第二个是分号,后跟
换行符
,或者是强制换行符序列。bash语法将第一个写为换行符,第二个写为分号(大多数情况下)。
 then
   echo "true"