ハッシュコマンドがこれに対してゼロを返すのはなぜですか?
$ hash -r
$ ls -l ./kkk
./kkk: No such file or directory
$ hash ./kkk
$ echo $?
0
答え1
パス検索を実行した後にhash
そのユーティリティが見つかると、ユーティリティはtrueを返します。$PATH
ユーティリティ名にパスを指定したので、シェルはいいえパス検索を実行しますが、指定したパスを使用します(./
)。シェルが実際に試すまで走るそのパスのユーティリティは、そのパスが存在しないことを発見しました。
POSIX仕様hash
説明する
ユーティリティに 1 つ以上の
<slash>
文字が含まれている場合、結果は指定されません。
...そしてbash
明らかに、「ユーティリティの検索にパス検索が必要でない場合は終了ステータス0を返す」など、指定されていない動作を実装します。