检查后man test
,我发现概要下有和 的test
可能性。test EXPRESSION
test
下面是什么[ EXPRESSION ], [ ] and [OPTION
意思?
为什么括号是空的以及为什么缺少[OPTION
括号?有人可以帮我解释一下吗?
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
答案1
[
是另一个名字为了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
将这些参数像其他任何参数一样视为字符串。[
能够通过右括号的存在来区分选项大小写和字符串大小写]
。
请注意,您的 shell 可能会提供自己的[
,因此您必须/bin/\[
使用此版本。
答案2
[
test
与某些 shell 上的 shell 内置命令相同。
如果您进一步查看,它描述了您可以测试的man test
有效内容:EXPRESSION
省略的 EXPRESSION 默认为 false。否则,EXPRESSION 为 true 或 false 并设置退出状态。它是以下之一:...
从手册页中您可能看不出来,但在较旧的/其他一些 shell 中, 和 都[
可以test
作为实际命令使用,这意味着您看到的空间[ EXPRESSION ]
是强制的为了EXPRESSION
被接受为争论为了[
/ test
。因此,即使对于将它们作为内置提供的 shell,它们也会保留这种格式以实现兼容性。
正如中所解释的@dr01当我输入这个答案时,右方括号是可选的。
答案3
[ OPTION
并不是真的缺少括号。
事实上,也许令人惊讶的是,[
有一个命令(位于/usr/bin/[
)相当于test
。因此(至少理论上)允许仅使用左括号,而右括号仅用作语法糖。然而,较新的 shell 版本需要它。