Bash의 `command` 및 `type`에 대한 매개변수가 선택사항인 이유는 무엇입니까?

Bash의 `command` 및 `type`에 대한 매개변수가 선택사항인 이유는 무엇입니까?

비슷하다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는 명령 매개변수가 필요하다고 생각합니다. 그래서 버그일 수도 있습니다.

POSIX 2008 명령 사양

답변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인 것은 이 동작의 자연스러운 연속입니다.

관련 정보