为什么 bash 中的 hash 命令对于 ./ 总是返回 true

为什么 bash 中的 hash 命令对于 ./ 总是返回 true

为什么 hash 命令为此返回 0

$ hash -r 

$ ls -l ./kkk
./kkk: No such file or directory

$ hash ./kkk
$ echo $?
0

答案1

如果在执行路径搜索后hash找到给定的实用程序,该实用程序将返回 true。$PATH

由于您为实用程序的名称提供了路径,因此 shell 会不是对它进行路径搜索,但使用您提供的路径 ( ./)。直到 shell 真正尝试跑步该路径上的实用程序发现它不存在。

POSIX 规范hash

如果实用程序包含一个或多个<slash>字符,则结果未指定。

...并且bash显然将未指定的行为实现为“如果不需要进行路径搜索来找到实用程序,则返回零退出状态”。

相关内容