~처럼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
). 인수가 없는 것은 이 동작의 자연스러운 연속입니다.