= Command 組込みコマンド
:encoding: UTF-8
:lang: ja
//:title: Yash マニュアル - Command 組込みコマンド

dfn:[Command 組込みコマンド]はコマンドを実行します。またコマンドの種類を特定します。

[[syntax]]
== 構文

- +command [-befp] {{コマンド}} [{{引数}}...]+
- +command -v|-V [-abefkp] {{コマンド}}...+

[[description]]
== 説明

+-v+ (+--identify+) オプションならびに +-V+ (+--verbose-identify+) オプションを付けずに実行すると、command コマンドは与えられた{{コマンド}}を与えられた{{引数}}で実行します。コマンドの実行の仕方は{zwsp}link:exec.html#simple[単純コマンドの実行]の最後のステップに準じますが、{zwsp}link:exec.html#search[コマンドの検索]では外部コマンド・組込みコマンド・関数の内オプションで指定したものしか検索しません。またコマンドが{zwsp}link:builtin.html#types[特殊組込みコマンド]の場合、コマンドのオプションやオペランドの使い方が間違っていたりリダイレクトエラーや代入エラーが起きたりしてもシェルは終了しません。

+-v+ (+--identify+) オプションまたは +-V+ (+--verbose-identify+) オプションを付けて実行すると、command コマンドは与えられた{{コマンド}}の種類とパスを特定しそれを標準出力に出力します。{{コマンド}}は{zwsp}link:syntax.html#aliases[エイリアス]や{zwsp}link:exec.html#function[関数]であっても構いません。

+-v+ (+--identify+) オプションを付けて実行したときの出力は以下のようになります。

- link:exec.html#search[コマンドの検索]の結果見つかったコマンドおよびその他の外部コマンドは、その絶対パスを出力します。
- コマンドの検索によらず実行される組込みコマンドや関数は、単にその名前を出力します。
- link:syntax.html#tokens[予約語]は、単にその名前を出力します。
- エイリアスは、コマンドとして実行可能な形式でその名前と値を出力します。
- コマンドが見つからなかった場合は、何も出力しません。(終了ステータスが非 0 になります)

+-V+ (+--verbose-identify+) オプション使用時は、出力の形式が人間にとってより読みやすくなります。

[[options]]
== オプション

+-a+::
+--alias+::
{{コマンド}}として{zwsp}link:syntax.html#aliases[エイリアス]を検索の対象にします。 +-v+ (+--identify+) または +-V+ (+--verbose-identify+) オプションと一緒に使う必要があります。

+-b+::
+--builtin-command+::
{{コマンド}}として組込みコマンドを検索の対象にします。

+-e+::
+--external-command+::
{{コマンド}}として外部コマンドを検索の対象にします。

+-f+::
+--function+::
{{コマンド}}として関数を検索の対象にします。

+-k+::
+--keyword+::
{{コマンド}}として予約語を検索の対象にします。 +-v+ (+--identify+) または +-V+ (+--verbose-identify+) オプションと一緒に使う必要があります。

+-p+::
+--standard-path+::
link:exec.html#search[コマンドの検索]において、{zwsp}link:params.html#sv-path[+PATH+ 変数]の代わりに、標準のコマンドをすべて含むようなシステム固有のデフォルトパスを用いて外部コマンドを検索します。

+-v+::
+--identify+::
与えられた{{コマンド}}の種類とパスを特定し、簡単な形式で標準出力に出力します。

+-V+::
+--verbose-identify+::
与えられた{{コマンド}}の種類とパスを特定し、人間にとって読みやすい形式で標準出力に出力します。

+-a+ (+--alias+), +-b+ (+--builtin-command+), +-e+ (+--external-command+), +-f+ (+--function+), +-k+ (+--keyword+) オプションのどれも指定しなかった場合は、以下のオプションを指定したものとみなします。

+-v+ (+--identify+) あるいは +-V+ (+--verbose-identify+) オプションを指定していないとき::
+-b -e+

+-v+ (+--identify+) または +-V+ (+--verbose-identify+) オプションを指定しているとき::
+-a -b -e -f -k+

[[operands]]
== オペランド

{{コマンド}}::
実行するまたは種類を特定するコマンドの名前です。

{{引数}}...::
実行するコマンドに渡すコマンドライン引数です。

[[exitstatus]]
== 終了ステータス

+-v+ (+--identify+) あるいは +-V+ (+--verbose-identify+) オプションを指定していないとき::
実行したコマンドの終了ステータス

+-v+ (+--identify+) または +-V+ (+--verbose-identify+) オプションを指定しているとき::
エラーがない限り 0

[[notes]]
== 補足

Command コマンドは{zwsp}link:builtin.html#types[必須組込みコマンド]です。

POSIX に規定のあるオプションは +-p+, +-v+, +-V+ だけです。これ以外のオプションは link:posix.html[POSIX 準拠モード]では使えません。また POSIX 準拠モードでは +-v+ または +-V+ オプションを使用するとき{{コマンド}}はちょうど一つしか指定できません。

POSIX は +-v+ オプションと +-V+ オプションを同時に指定することを認めていません。Yash ではこれら二つのオプションを両方指定すると最後に指定したものが有効になります。

// vim: set filetype=asciidoc expandtab:
