我读`哪个`,但是全部但我无法真正理解其中的区别。我在 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 对csh
s的回答which
,type
Bourne shell 命令,command -v/V
POSIX 命令……
zsh
实现了ksh
一些whence
扩展,但也which
为 csh junkies 和type
/提供了别名command -v/V
,以实现 POSIX 合规性,它们只是相同的命令,但具有不同的默认行为。
which
是whence -c
(c
为csh
)type
是whence -v
(更详细whence
)where
是whence -ca
- POSIX
command -v
就像whence
- POSIX
command -V
就像whence -v
您可以在以下位置找到更多信息(虽然有点混乱,抱歉)为什么不用“哪个”呢?那该用什么呢?
答案2
[-vcfpam] 名称从何而来...
对于每个名称,请指出如果用作命令名称,将如何解释它。该-v
标志会生成更详细的报告。该-c
标志以类似 csh 的格式打印结果,并优先于-v
。该-f
标志导致显示 shell 函数的内容,除非-c
使用该标志,否则不会发生这种情况。该-p
标志对名称进行路径搜索,即使它是别名、保留字、shell 函数或内置函数。该-a
标志搜索整个命令路径中所有出现的名称。使用该-m
标志,参数将被视为模式(应加引号),并显示与这些模式之一匹配的每个命令的信息。
其中 [-pam] 名称... 与 -c 相同。
您应该检查zsh 手册