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