`command echo --help` 调用 bash 内部 echo 函数

`command echo --help` 调用 bash 内部 echo 函数

根据help commandbash 的帮助,command可以用来触发外部程序 x,如果 x 也作为内置函数存在:

command: command [-pVv] command [arg ...]
    Execute a simple command or display information about commands.
    
    Runs COMMAND with ARGS suppressing  shell function lookup, or display
    information about the specified COMMANDs.  Can be used to invoke commands
    on disk when a function with the same name exists.

当使用 进行测试时time,它按预期工作并使用外部程序/bin/time,但是当我尝试时:

command echo --help    
# the output is 
--help

这是内置的预期行为echo

使用 xubuntu 22.04,bash 5.1.16/bin/echo --help按预期工作。

我是否误解了command命令?或者为什么它没有像宣传的那样工作?我该如何找出答案?

GNU bash, Version 5.1.16(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.

答案1

它确实像宣传的那样有效:它抑制shell 函数查找,而非内置查找。使用 的效果time具有误导性:time保留字,不是内置的,并且只能在管道的开头执行。在 中command time,管道由 启动command,因此time它只能执行外部管道。

为了看出区别,定义一个函数:

echo () { date; }

echo与进行比较command echo。(您可以使用 删除该函数unset -f echo。)

要查看某个东西是什么,请使用type

$ foo () { true; }
$ type if time [[ [ echo foo
if is a shell keyword
time is a shell keyword
[[ is a shell keyword
[ is a shell builtin
echo is a shell builtin
foo is a function
foo ()
{
    true
}

相关内容