0

我正在查看两个版本的 Apache 的配置脚本之间的差异,我在新版本的配置中注意到以下内容:

if [ some test ]; then :
    do this
else
    do that

与旧版本相比:

if [ some test ]; then
    do this
else
    do that

唯一的区别是:(冒号),无操作,在 then 语句之后。

编辑1:所以新版本基本上是说:

if "this" then "do nothing"
    "do this"
else
    "do that"

故意添加那个冒号的目的是什么?

注意我见过类似的问题What Is the purpose of the `:' (colon) GNU Bash Builtin?但这不包括这个特定的场景。

编辑 2:当您将 2.2.17 版中 Apache APR 的配置脚本与 2.2.24 版中的配置脚本进行比较时,这是可见的。

Apache 站点下载这两个 tarball,解压后配置文件位于目录 httpd-2.2.x/srclib/apr 中,这两个版本都是如此。

v2.2.24 版本中的第 26015 行显示了这个结构。

4

1 回答 1

2

在这种情况下,内置的冒号做了它一直做的事情:什么都没有,成功。

您总是可以在then关键字之后写一个命令,如下所示:

if [ some test ]; then do one thing
    do another thing
fi

在这种特殊情况下,作者将:其用作第一个命令,可能是因为印刷效果。

:在关键字之后使用的另一个原因then可能是确保在 if 语句中删除或注释 case 行时的正确性。例如,如果冒号被删除,这将是非法的语法:

if [ some test ]; then :
    # do one thing     ## Disabled due to bug #12992
fi
于 2013-05-31T12:42:22.773 回答