“man test”中的“[ EXPRESSION ]、[ ]和[OPTION”是什么意思?

“man test”中的“[ EXPRESSION ]、[ ]和[OPTION”是什么意思?

检查后man test,我发现概要下有和 的test可能性。test EXPRESSIONtest

下面是什么[ 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 版本需要它

相关内容