如果我在脚本中写这个
if [[ 1 == 1 ]]
then
echo "true"
fi
但是如果我尝试用换新线替换;当使用活动shell时,我得到语法错误
if [[ 1 == 1 ]]; then; echo "true"; fi
为什么?
在enter
和then
;
之间有什么区别
答案 0 :(得分:1)
在大多数情况下,复合命令描述中的命令列表可以通过一个或多个换行符与命令的其余部分分开,并且可以后跟换行符代替分号。
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
,我们就完成了。