我在回答另一个问题时注意到test
和[
是不同的二进制文件,但[
联机帮助页拉出了test
's.除了需要结局之外]
,还有什么区别吗?如果不是,为什么它们是单独的二进制文件而不是符号链接? (它们也是bash
内置的,也bash
没有显示出差异。)
答案1
这源代码将差异解释为它处理--help
选项的方式。
/* Recognize --help or --version, but only when invoked in the "[" form, when the last argument is not "]". Use direct parsing, rather than parse_long_options, to avoid accepting abbreviations. POSIX allows "[ --help" and "[ --version" to have the usual GNU behavior, but it requires "test --help" and "test --version" to exit silently with status 0. */
示范
$ /usr/bin/test --help
$
$ /usr/bin/[ --help
Usage: test EXPRESSION
or: test
or: [ EXPRESSION ]
or: [ ]
or: [ OPTION
Exit with the status determined by EXPRESSION.
[...]
在bash
内置版本中,唯一的区别是[
需要]
在最后,正如你所说。
答案2
通常,它们是带有硬链接的相同二进制文件。根据 shell 的不同,可以使用内部实现而不是二进制文件进行测试test
。[
这在进程生成方面更有效,并且可以提供与二进制程序test
提供的不同的选项。
除了调用格式不同之外,它们都提供相同的功能。