我相信以下两个代码片段在符合 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
首选哪种语法,为什么?在某些情况下是否有理由使用一个而不是另一个?
最佳答案
没有功能差异,这使其成为一种纯粹的风格选择,没有广泛接受的指导方针。 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
, (
和 )
,以及具有四个以上参数的任何用法(不包括以名称 ]
开始的实例上的尾随 [
)。
关于shell - 我应该在 POSIX shell 中使用 "test"还是 "[" "]"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38001248/