![为什么which命令如此难以根除?](https://linux22.com/image/158356/%E4%B8%BA%E4%BB%80%E4%B9%88which%E5%91%BD%E4%BB%A4%E5%A6%82%E6%AD%A4%E9%9A%BE%E4%BB%A5%E6%A0%B9%E9%99%A4%EF%BC%9F%20.png)
我来自这样的地方为什么不用“哪个”呢?那该用什么呢?和https://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-scriptwhich
我本人也是出于所有众所周知的原因而建议不要使用 的长期支持者。但这看起来像是一场艰苦的战斗。
为什么让人们放弃这个which
命令这么难?
许多其他最初遭到反对和怀疑的 POSIX 创新随着时间的推移已成为正常 U*x 规范的一部分,但这似乎是该领域的采用极其不稳定的创新。
我想了解为什么人们很难牢记这个具体的 POSIX 建议。难道只是POSIX的立场还不稳定(首先type
, 现在command
)?或者是因为 POSIX 名称command
在某种程度上难以记住或内化? (我想知道 Bash 是否command
在 POSIX 之前就有,也许语义略有不同?)或者它仍然只是仍然推荐的所有网站和论坛帖子的泛滥which
,以及它无疑稍微朗朗上口的名字?
答案1
因为command -v
不是 的直接替代which
;
https://github.com/koalaman/shellcheck/issues/1162
which
- 输出完整路径,
- 忽略 shell 内置函数和函数,
- 仅当全部存在时才返回 true
- 输出 bin 而不是别名
- 与破折号不同的是
type -p
- 绝大多数计算机使用大约 5 种 Bash/Linux 风格,因此不兼容的实现很少见。
答案2
除了@user1133275的回答和相关评论之外,人们不能总是判断是否which
或type
正在被使用。就我个人而言,我的手指只是经过训练才能使用which
,我发现该命令名称更容易记忆直观。但事实上,我实际上正在使用type
:
$ which which
$ which type
$ type type
type is a shell builtin
$ type which
which is a function
which ()
{
type -path ${1+"$@"}
}
如果明天有人提出更好的命令,我将更改.profile
并继续使用我的自定义which
.
简而言之,我认为它很难根除,因为它的名称与其功能密切相关。