“whence”与“which”有什么不同?

“whence”与“which”有什么不同?

我读`哪个`,但是全部但我无法真正理解其中的区别。我在 64 位 debian-buster 上运行 zsh 5.4.2。 which 和whence 都是shell 内置函数。

人们能否指出where from 比which 更合适,反之亦然?

/home/shirish> zsh --version
zsh 5.4.2 (x86_64-debian-linux-gnu)

/home/shirish> type -a which
which is a shell builtin
which is /usr/bin/which
which is /bin/which

/home/shirish> type -a whence
whence is a shell builtin

答案1

which是一个 csh 命令(是一个csh读取您的 的脚本~/.cshrc),whence是 Korn shell 对cshs的回答whichtypeBourne shell 命令,command -v/VPOSIX 命令……

zsh实现了ksh一些whence扩展,但也which为 csh junkies 和type/提供了别名command -v/V,以实现 POSIX 合规性,它们只是相同的命令,但具有不同的默认行为。

  • whichwhence -c(ccsh)
  • typewhence -v(更详细whence
  • wherewhence -ca
  • POSIXcommand -v就像whence
  • POSIXcommand -V就像whence -v

您可以在以下位置找到更多信息(虽然有点混乱,抱歉)为什么不用“哪个”呢?那该用什么呢?

答案2

[-vcfpam] 名称从何而来... 对于每个名称,请指出如果用作命令名称,将如何解释它。该-v标志会生成更详细的报告。该-c标志以类似 csh 的格式打印结果,并优先于-v。该-f标志导致显示 shell 函数的内容,除非-c使用该标志,否则不会发生这种情况。该-p标志对名称进行路径搜索,即使它是别名、保留字、shell 函数或内置函数。该-a标志搜索整个命令路径中所有出现的名称。使用该-m标志,参数将被视为模式(应加引号),并显示与这些模式之一匹配的每个命令的信息。

其中 [-pam] 名称... 与 -c 相同。

您应该检查zsh 手册

相关内容