
如同為什麼 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
,您會得到一個不執行任何操作(但仍執行重定向)的 shell 命令。奇怪的是,使用 ksh 93s+ 2008-01-31(但不使用 pdksh、mksh、bash、ash 或 zsh)時,ksh -c 'foo=bar command; echo $foo'
顯示bar
,這表示該賦值被視為 shell 變數賦值,而不是命令本地環境賦值。此行為僅適用於特殊的內建實用程序, 哪個command
不是(理由解釋了為什麼不行)。這看起來像是 ksh93 中的一個錯誤。
在 ksh 中,builtin
顯示內建實用程式的列表,這非常有用。
type
是一種不同的情況:它接受多個參數,並依序報告每個參數(例如type ls cd
)。零參數是這種行為的自然延續。