# Hash 組込みコマンド

Hash 組込みコマンドは外部コマンドのパスを検索・表示します。

## 構文

- `hash コマンド…`

- `hash -r [コマンド…]`

- `hash [-a]`

- `hash -d ユーザ名…`

- `hash -dr [ユーザ名…]`

- `hash -d`

## 説明

オプションを指定しない場合、hash コマンドはオペランドで指定した​外部コマンドのパスを検索し、結果を記憶します (既に記憶している場合は再度検索・記憶します)。

`-r` (`--remove`) オプションを指定している場合、hash コマンドはオペランドで指定した外部コマンドのパスに関する記憶を消去します。`-r` (`--remove`) オプションを指定しかつコマンドを指定しない場合、全ての記憶を消去します。

`-r` (`--remove`) オプションを指定せずコマンドも指定しない場合、記憶しているパスの一覧を標準出力に出力します。

`-d` (`--directory`) オプションを指定した場合、hash コマンドは外部コマンドのパスの代わりにユーザのホームディレクトリのパスを検索・記憶または表示します。記憶したパスは​チルダ展開で使用します。

## オプション

`-a`
`--all`

  シェルが記憶している全てのパスを出力します。

  このオプションを指定しない場合、シェルが記憶しているパスのうち組込みコマンドに対するものは出力しません。

`-d`
`--directory`

  外部コマンドのパスの代わりにユーザのホームディレクトリのパスを扱います。

`-r`
`--remove`

  指定したコマンドまたはユーザ名に対するパスの記憶を消去します。

## オペランド

コマンド

  パスを記憶・消去する外部コマンドの名前です。スラッシュを含むパスを指定することはできません。

ユーザ名

  ホームディレクトリのパスを記憶・消去するユーザ名です。

## 終了ステータス

エラーがない限り hash コマンドの終了ステータスは 0 です。

## 補足

シェルは、外部コマンド (またはチルダ展開) を実行する際に自動的にコマンド (またはホームディレクトリ) のパスを記憶するので、通常はわざわざ hash コマンドを使ってパスを記憶させる必要はありません。

`PATH` 変数の値が変わった時は、記憶した外部コマンドのパスは自動的にすべて消去されます。

POSIX が規定しているオプションは `-r` だけです。よって他のオプションは POSIX 準拠モードでは使えません。

Hash コマンドは​必須組込みコマンドです。