`man test`中的[[EXPRESSION],[]和[OPTION]是什么意思?


8

审查man test,我看到在大纲test的可能性test EXPRESSION和可能性test

[ EXPRESSION ], [ ] and [OPTION下面是什么意思?

为什么括号是空的,为什么会[OPTION漏掉括号?有人可以帮我解释一下吗?

NAME
       test - check file types and compare values

SYNOPSIS
       test EXPRESSION
       test

       [ EXPRESSION ]
       [ ]
       [ OPTION

Answers:


10

[另一个名字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/\[使用此版本。


4

[test某些Shell上内置的Shell 相同。

如果您往下看man test,它描述了EXPRESSION可以测试的有效值:

省略的EXPRESSION默认为false。否则,EXPRESSION为true或false,并设置退出状态。它是以下之一:...

这可能不是从该名男子页是显而易见的你,但在年长/其他一些贝壳,两者[test可以作为实际的命令,这意味着你在看的空间[ EXPRESSION ]强制性EXPRESSION被接受作为一个参数[/ test。因此,即使对于以内置形式提供它们的外壳,它们也保留了这种格式以实现兼容性。

正如我在输入@ dr01的答案中所解释的那样,右方括号是可选的。


@don_crissti感谢您的单挑,我想我只是简单地省略了最后一句话……
hjk 2015年

0

[ OPTION 并不是真的缺少括号。

实际上,也许令人惊讶的[是,一个/usr/bin/[等效于的命令(位于中)test。因此(至少在理论上)允许仅使用左括号,而右括号仅用作语法糖。但是,较新的Shell版本需要它


两者之间还有其他区别,而test不是无法与选项一起使用(未列出)。
Shuzheng 2015年

1
允许省略右支架,无论是在POSIX或GNU [
Michael Homer

@MichaelHomer是的。已更正。
dr_

我不确定Bash与这有什么关系……
Michael Homer 2015年

1
@MichaelHomer,在POSIX中,未指定如果省略右方括号的行为,因此不允许POSIX 脚本省略],但是POSIX [可以执行所需的操作,包括调用您的名字并重新引导计算机或打印帮助消息。如果没有它就叫它。这允许GNU grep[ --versiontest --version并且[ --version ]必须返回true(测试是否--version为非空字符串),并且什么也不输出。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.