bashのhashコマンドが常に./に対してtrueを返すのはなぜですか?

bashのhashコマンドが常に./に対してtrueを返すのはなぜですか?

ハッシュコマンドがこれに対してゼロを返すのはなぜですか?

$ 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を返す」など、指定されていない動作を実装します。

おすすめ記事