`test` 和 `[` - 不同的二进制文件,有什么区别吗?

`test` 和 `[` - 不同的二进制文件,有什么区别吗?

我在回答另一个问题时注意到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提供的不同的选项。

除了调用格式不同之外,它们都提供相同的功能。

相关内容