为什么which命令如此难以根除?

为什么which命令如此难以根除?

我来自这样的地方为什么不用“哪个”呢?那该用什么呢?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的回答和相关评论之外,人们不能总是判断是否whichtype正在被使用。就我个人而言,我的手指只是经过训练才能使用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.

简而言之,我认为它很难根除,因为它的名称与其功能密切相关。

相关内容