`test`와`[`-다른 바이너리, 차이점이 있습니까? 또 다른 질문에 대답하면서 나는

또 다른 질문에 대답하면서 나는 발견 test하고 [다른 바이너리됩니다,하지만 [맨 위로 끌어 test‘들. 결말에 대한 요구 사항 외에 ]차이점이 있습니까? 그렇지 않다면 왜 심볼릭 링크가 아닌 별도의 바이너리가 있습니까? (또한 bash내장되어 있으며 bash차이점도 표시되지 않습니다.)



답변

소스 코드 가 처리하는 방법 인 것으로 차이에 대해 설명 --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내장 버전, 유일한 차이점은입니다 [필요 ]당신이 말한대로, 마지막에.


답변

일반적으로 하드 링크가있는 동일한 바이너리입니다. 쉘에 따라 바이너리 대신 내부 구현을 사용 test하고 [테스트 할 수 있습니다 . 이는 프로세스 생성 측면에서 더 효율적이며 이진 프로그램이 test제공 하는 옵션과 다른 옵션을 제공 할 수 있습니다 .

통화 형식의 차이점 외에도 둘 다 동일한 기능을 제공합니다.