단일 대괄호 [
와 test
명령은 bash 쉘에 내장되어 있습니다.
대괄호 [
와 test
명령이 동일한 기능을 갖는다면 왜 두 개의 별도 명령이 있습니까?
답변1
[
그리고 test
같은 명령입니다. 단지, [
마지막 매개변수가 될 것으로 예상하세요 ]
(그렇지 않으면 무시됩니다).
[
명령은 test
일반적으로 동일한 바이너리로 구현됩니다. Bourne과 같은 대부분의 쉘 fish
에는 . C 쉘이나 그 파생물은 그렇지 않습니다. C 셸에는 일반적으로 /utils에서 수행되는 일부 작업을 수행하기 위한 특수 구조가 있습니다 .[
test
rc
test
[
이 test
명령은 당시 새로운 Bourne 셸과 함께 1970년대 후반 Unix V7에 등장했습니다. 이전 버전에는 명령이 없었고 test
해당 쉘이 구성되지 않았습니다 if
. 하지만 하나 있어요독립 if
명령동일한 테스트 중 일부를 수행 test
하고 결과에 따라 명령을 실행할 수 있습니다.
Bourne 쉘에는 몇 가지 제어문( if
// )이 도입되었기 때문에 while
이러한 명령문의 조건부 부분에 사용하여 다양한 테스트를 수행할 수 있는 명령이 있도록 이를 보완하기 위해 도입되었습니다.until
test
V7에는 명령이 없지만 [
몇 가지 명령을 찾을 수 있습니다.다듬지 않은 코드를 주석 처리하세요.거기에는 내장되어 있는데 [
, 이는 그들이 그것을 구상했지만 sh
아마도 당시에는 코드를 망치지 않기로 결정했을 것임을 암시합니다.
[
test
Bourne 쉘에 내장 기능을 추가합니다 .1981년 시스템 III에 진입.
그 이후의 모든 Bourne 유사 쉘에는 / 내장 기능이 bash
있지만 [
Almquist 쉘에는 처음부터 / 내장 기능이 있었지만(실제로 병합됨) 완전히 비활성화될 때까지 초기 BSD에서 원래 비활성화되었습니다(컴파일되지 않음). 다소 늦었습니다.test
[
test
expr
[
와 둘 test
다표준 POSIX 명령. 내장될 필요는 없지만 , , 등에서 실행 가능해야 하므로 env
독립 실행형 실행 파일로 사용할 수 있습니다 find -exec
.execvp()
독립 실행형 유틸리티를 제공하는 시스템도 있지만 하나도 제공 test
되지 않습니다 [
. 이는 다음을 더 자주 보게 되는 이유를 설명합니다.
find . -exec test -f {} ';'
(GNU 와 동일 find
) -xtype f
, 비교:
find . -exec [ -f {} ] ';'
[
독립 실행형 유틸리티를 제공하지 않는 시스템에서는 이 작업이 실패합니다.
[
test
과 사이 의 또 다른 일화적인 차이점 test <any-string>
( 과 동일 ) 은 비어 있지 않거나 반환 할 수 없는 버전 또는 그 사용법 [ <any-string> ]
에 대한 유효한 테스트입니다 . 그러나 이것은 유효한 테스트가 아니므로 GNU 독립 실행형 유틸리티는 일반적인 오류 메시지 대신 버전 및 사용 정보를 별도로 받아들이고 반환 하지만 GNU는 그렇지 않습니다(참조<any-string>
test --version
test --help
test
[ --version
[
--version
--help
missing ‘]’
test
2003년에 해당 제출(오해의 소지가 있는 댓글2005년에 복원됨)).
$ '/usr/bin/[' --version
[ (GNU coreutils) 8.30
[...]
$ /usr/bin/test --version && echo "--version is non-empty"
--version is non-empty
$ '/usr/bin/[' --something-else
/usr/bin/[: missing ‘]’