如同为什么 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
)。零参数是这种行为的自然延续。