`test`와 `[` - 다른 바이너리, 차이점이 있나요?

`test`와 `[` - 다른 바이너리, 차이점이 있나요?

test다른 질문에 대한 답변에서 과 는 [다른 바이너리 라는 것을 알았지 만 [맨페이지에서는 test엔딩이 필요한 것 외에 ]다른 점이 있습니까 ? 그렇지 않다면 왜 심볼릭 링크가 아닌 별도의 바이너리입니까? (또한 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

일반적으로 하드 링크가 포함된 동일한 바이너리입니다. 셸에 따라 테스트를 위해 바이너리 대신 내부 구현을 사용할 수도 있습니다 test. [이는 프로세스 생성 시 더 효율적이며 test바이너리 프로그램에서 제공하는 것과 다른 옵션을 제공할 수 있습니다.

다양한 호출 형식 외에도 모두 동일한 기능을 제공합니다.

관련 정보