
비슷하다Bash 내장 매개변수가 선택사항인 이유는 무엇입니까?, 이 명령은 아무 것도 인쇄하지 않고 매개변수가 제공되지 않으면 종료 코드 0을 반환합니다. 그러나 와 달리 builtin
출력 help
상태는 다음과 같습니다.하나 이상의 매개변수가 필수입니다.. 이것은 버그입니까, 기능입니까, 아니면 제가 뭔가 잘못 이해한 것입니까?
$ bash --version
GNU bash, version 4.2.10(1)-release (x86_64-pc-linux-gnu)
$ type -a command
command is a shell builtin
$ type -a type
type is a shell builtin
$ help -s command
command: command [-pVv] command [arg ...]
$ help -s type
type: type [-afptP] name [name ...]
$ command
$ echo $?
0
$ type
$ echo $?
0
답변1
POSIX는 명령 매개변수가 필요하다고 생각합니다. 그래서 버그일 수도 있습니다.
답변2
의 경우 command
즉각적인 설명은 ksh가 동일한 작업을 수행한다는 것입니다(적어도 ATT ksh93, pdksh 및 mksh는 command
인수 없이 실행할 때 아무 작업도 수행하지 않으며 테스트할 ATT ksh88이 없습니다).
ksh가 왜 그렇게 행동하는지 모르겠습니다. 잠정적인 설명은 와 command foo
매우 유사하다는 것입니다 foo
. 을 생략하면 아무 작업도 foo
수행하지 않는(그러나 여전히 리디렉션을 수행하는) 쉘 명령을 받게 됩니다. 이상하게도 ksh 93s+ 2008-01-31(pdksh, mksh, bash, ash 또는 zsh는 제외)을 사용하면 ksh -c 'foo=bar command; echo $foo'
이 표시됩니다 bar
. 이는 할당이 명령 로컬 환경 할당이 아닌 쉘 변수 할당으로 처리됨을 의미합니다. 이 동작은 다음에서만 예상됩니다.특수 내장 유틸리티, 어느command
그렇지 않습니다(이유는 그렇지 않은 이유를 설명합니다). 이것은 ksh93의 버그처럼 보입니다.
ksh에서는 builtin
유용한 내장 유틸리티 목록을 표시합니다.
type
는 다른 경우입니다. 여러 인수를 허용하고 각각에 대해 차례로 보고합니다(예: type ls cd
). 인수가 0인 것은 이 동작의 자연스러운 연속입니다.