为什么按名称调用的命令在按完整路径调用时表现不同?

zeg*_*jan 1 bash kill

我想kill --verbose ...在 bash 脚本中使用,但出现错误kill: -verbose: invalid signal specification。这很奇怪,因为它在鱼中工作得很好。我的调查使我出现了这种奇怪的行为:

$ which kill
/usr/bin/kill
$ sleep 5 & kill --verbose $!
[1] 33730
bash: kill: -verbose: invalid signal specification
... wait for sleep to finish ... 
[1]+  Done                    sleep 5
$ sleep 5 & /usr/bin/kill --verbose $!
[1] 33964
sending signal 15 to pid 33964
[1]+  Terminated              sleep 5
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?为什么不kill识别--verbose标志,但是/usr/bin/killwhich kill==时可以识别/usr/bin/kill

Ste*_*itt 5

which具有误导性type改为尝试:

$ type kill
kill is a shell builtin
Run Code Online (Sandbox Code Playgroud)

当您运行 时kill,bash 使用其内置命令,该命令无法识别--verbose. 当您指定完整路径时,将/usr/bin/kill运行外部命令,并且确实支持--verbose(在您的情况下)。