我相信以下两个代码段在符合POSIX标准的shell中都有效:
选项1:
if [ "$var" = "dude" ]
then
echo "Dude, your var equals dude."
fi
选项2:
if test "$var" = "dude"
then
echo "Dude, your var equals dude."
fi
首选哪种语法?为什么?在某些情况下,是否有理由使用其中一种?
答案 0 :(得分:7)
没有任何功能差异,使其成为纯粹的风格选择,没有广泛接受的指导方针。 The bash-hackers wiki有一个关于经典(POSIX兼容)test
的扩展部分,对最佳实践和陷阱有很多关注,并且没有任何优先选择的位置。
此外,the POSIX specification for test
- 虽然 标记了大量功能过时的 1 - 指明这两种形式都不是另一种形式。
尽管如此,test
的一个优点是,它不太有利于人们从其他语言中引入期望导致代码损坏或错误。例如,写[$foo=1]
而不是正确的[ "$foo" = 1 ]
是一个常见的错误,但人们并没有广泛看到写test$foo=1
:它还有更多在视觉上显而易见的是test "$foo" = 1
遵循与其他shell命令相同的解析规则,因此需要关于引用和空格的相同关注。
[1] 例如-a
,-o
,(
和)
,以及超过四个参数的任何用法(不包括在名为]
)的实例上追踪[
。