从这个网页:
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.
有谁知道这是从哪里来的,如果某些炮弹需要它?
答案 0 :(得分:12)
这已成为过去几年的风格:
if [ -x "$filename" ]; then
echo "hi"
fi
然而,当Burroughs和Sperry Rand等恐龙统治地球时,我学会了写下这样的陈述:
if [ -x "$filename" ]
then
echo "hi"
fi
然后,你甚至不需要分号。
then
与if
在同一行开始的新样式,以模仿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。