我应该在 POSIX shell 中使用“test”还是“[”“]”?

问题描述 投票:0回答:1

我相信以下两个代码片段在符合 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

首选哪种语法?为什么?在某些情况下是否有理由使用其中一种而不是另一种?

shell posix sh
1个回答
8
投票

没有功能差异,这纯粹是风格选择,没有广泛接受的指导方针。 bash-hackers wiki(由 Wayback Machine @ archive.org 存档),标题为“经典测试命令”的页面有一个关于经典(POSIX 兼容)的扩展部分

test
,非常关注最佳实践和陷阱,并且不采取任何立场。

此外,

test
的 POSIX.1(-2017) 规范 - 虽然它确实标记了大量已过时的功能1 - 指定这两种形式都不优于另一种形式。

也就是说,

test
的一个优点是,它不太利于人们引入其他语言的期望,从而导致代码损坏或有错误。例如,写
[$foo=1]
而不是正确的
[ "$foo" = 1 ]
是一个常见的错误,但人们并不普遍写
test$foo=1
:从视觉上更明显看出
test "$foo" = 1
遵循与其他 shell 相同的解析规则命令,因此需要同样注意引用和空格。


[1] 例如

-a
-o
(
)
,以及任何具有四个以上参数的用法(不包括以名称
]
启动的实例上的尾随
[
) .

© www.soinside.com 2019 - 2024. All rights reserved.