Answers:
[
是另一个名字的test
。所有这三行都是test
带有某些选项的命令行。
在第一行中,这是标准测试:[ 5 -gt 4 ]
与相同test 5 -gt 4
。
在第二个中,省略了表达式,这意味着退出false(0 arguments: Exit false (1)
)。
对于第三种情况,我猜您正在使用GNU coreutils。在GNU中test
,帮助文本包含以下说明:
NOTE: [ honors the --help and --version options, but test does not. test treats each of those as it treats any other nonempty STRING.
这是一个非POSIX扩展;动机似乎test
是将这些参数当作其他字符串一样对待。[
能够通过使用右方]
括号来区分选项情况和字符串情况。
请注意,您的外壳可能会提供自己的外壳[
,因此您必须/bin/\[
使用此版本。
[
与test
某些Shell上内置的Shell 相同。
如果您往下看man test
,它描述了EXPRESSION
可以测试的有效值:
省略的EXPRESSION默认为false。否则,EXPRESSION为true或false,并设置退出状态。它是以下之一:...
这可能不是从该名男子页是显而易见的你,但在年长/其他一些贝壳,两者[
并test
可以作为实际的命令,这意味着你在看的空间[ EXPRESSION ]
是强制性的EXPRESSION
被接受作为一个参数为[
/ test
。因此,即使对于以内置形式提供它们的外壳,它们也保留了这种格式以实现兼容性。
正如我在输入@ dr01的答案中所解释的那样,右方括号是可选的。
[ OPTION
并不是真的缺少括号。
实际上,也许令人惊讶的[
是,一个/usr/bin/[
等效于的命令(位于中)test
。因此(至少在理论上)允许仅使用左括号,而右括号仅用作语法糖。但是,较新的Shell版本需要它。
test
不是无法与选项一起使用(未列出)。
[
。
]
,但是POSIX [
可以执行所需的操作,包括调用您的名字并重新引导计算机或打印帮助消息。如果没有它就叫它。这允许GNU grep
的[ --version
。test --version
并且[ --version ]
必须返回true(测试是否--version
为非空字符串),并且什么也不输出。