if的Bash约定;然后

时间:2011-11-02 18:19:30

标签: bash shell coding-style

从这个网页:

http://tldp.org/LDP/abs/html/abs-guide.html

它提到了使用if括号然后约定分号后需要空格:

  

Command separator [semicolon]. Permits putting two or more commands on the same line.

echo hello; echo there


if [ -x "$filename" ]; then    #  Note the space after the semicolon.
#+                   ^^
  echo "File $filename exists."; cp $filename $filename.bak
else   #                       ^^
  echo "File $filename not found."; touch $filename
fi; echo "File test complete."

Note that the ";" sometimes needs to be escaped.

有谁知道这是从哪里来的,如果某些炮弹需要它?

5 个答案:

答案 0 :(得分:12)

这已成为过去几年的风格:

if [ -x "$filename" ]; then
   echo "hi"
fi

然而,当Burroughs和Sperry Rand等恐龙统治地球时,我学会了写下这样的陈述:

if [ -x "$filename" ]
then
    echo "hi"
fi

然后,你甚至不需要分号。

thenif在同一行开始的新样式,以模仿C和其他编程语言执行if语句的方式:

if (! strcmp("foo", "bar")) {
   printf "Strings equal\n";
}

这些编程语言将左大括号放在与if相同的行上。

答案 1 :(得分:8)

分号;是Shell中的运算符(不是关键字,如大括号{ }或爆炸!),所以它不需要用任何符合POSIX标准的shell中的空格分隔。

然而,这样做会提高可读性(根据我的口味)。

如果您的意思是“分号”符号而不是运算符,则需要转义分号。

答案 2 :(得分:0)

我知道的任何shell的语法都不需要分号后面的空格,但它的样式很好,使代码更容易阅读。

我认为“有时需要转义”措辞是指像echo foo\;bar这样的情况,你不希望分号被shell解释为分隔符。

答案 3 :(得分:0)

我不相信那里的空间是必要的。 POSIX sh spec中没有任何要求空格的内容。

根据经验,以下bash 4.1.5(1)和dash中的以下工作正常:

$ if true;then echo hi;else echo bye;fi
hi
$ 

答案 4 :(得分:0)

我从未遇到过在这种情况下需要空间的shell。 为了确保,我已经问过c.u.s.你可以阅读回复here