Bashの「command」および「type」パラメータがオプションであるのはなぜですか?

Bashの「command」および「type」パラメータがオプションであるのはなぜですか?

〜のようにBashの組み込みパラメータがオプションであるのはなぜですか?、このコマンドは、引数が指定されていない場合は何も印刷せずに終了コード0を返します。ただし、違いは出力が次のように表示されることbuiltinですhelp1つ以上のパラメーターが必須です。。これはバグですか、機能ですか、それとも何か誤解していますか?

$ 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:)。引数がないのは、この動作の自然な連続です。

関連情報