条件结构中的分号


35

为什么将分号放在一个而不是另一个中?

结果是一样的

代码一

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

代码二

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

第二个代码中的分号是不必要的吗?

什么时候需要放置分号?


2
这已经得到了充分和适当的回答,但是我想让OP也知道这一点;只是替换任何行尾,因此您可以将两个命令合并为一行,例如:svn up; make
Aaron D. Marasco 2012年

1
另请注意;;,case语句中使用两个分号来分隔匹配项。 ;;在这里是必需的,不是可选的。...但是;;;or 并不相同; ;,它看起来有点像。单个分号;在case语句的COMMANDS部分中正常工作。
cas 2012年

Answers:


31

仅当缺少行尾时才需要使用分号:

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

没有分号,您会收到语法错误。

我不明白您关于报价的问题。你可以说得更详细点吗?

(顺便说一句,using =代替==更加可移植且符合POSIX)。


第二个代码中的引号是不必要的吗?
Jhonathan 2012年

2
两个示例中的所有引号都是不必要的。
choroba 2012年

6

经常使用分号,因为有些人(例如/ me)喜欢这样的样式:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

因此,如果将then-关键字放在条件行上,则这是必需的,因为新的命令开始运行,如choroba所写。

关于条件检查中的引号,它们通常与变量一起使用,以确保如果没有为变量分配任何内容,则不会发生异常。这是一种更安全的样式,看起来不是必需的样式,但是即使在shell编程中,尽管无法将内容分配给变量,但它仍会不时地使程序处理。然后该命令仍然有效,因为比较了一个空字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.