bash 命令 `command` 的用途是什么以及它在 shell 脚本中出现时是什么意思

bash 命令 `command` 的用途是什么以及它在 shell 脚本中出现时是什么意思

当我编写 shell 脚本时,我碰巧知道command是一个保留字。然后我注意到command 也是一个 bash 命令。

  • command ls给出的结果与 相同ls
  • command ls | grep xxx其结果与没有它时相同。

那么我想知道当它是 bash 命令时它有什么用处。当它是 shell 脚本时它有什么用处。谢谢!

答案1

command foofoo即使定义了shell 函数,也会运行该命令foo。此行为是POSIX 要求

foo它允许您在函数内部调用命令foo。如果没有command foo该函数(调用时)将调用自身并创建循环引用。

嗯,有时你可以foo通过完整路径调用可执行文件来抑制 shell 函数查找(很麻烦而且不可移植,但某种解决方法),但在某些情况下你不能。例如在我的这个答案(接近尾声)我重新定义了“cd必须command cd”,因为即使有cd可执行文件我可以使用哪个完整路径,它不会改变目录。command使用正确的方式来解决这个问题。

还要注意command foo不会触发foo别名(如果有)。您用作ls示例。至少有几个常见的 Linux 发行版默认将别名设置ls为。在这种情况下,和可能会产生不同的结果(即有色或无色)。POSIX(或任何其他)的定义不需要提及别名,因为首先不会触发别名(如果有)(关于的可能例外很少,但不是其中之一)。ls --color=autolscommand lscommandbar foofoobarcommand

无论您是command foo在交互式 shell 会话中还是在 shell 脚本中使用都可能对 有影响foo,但对内置命令本身却无关紧要command

相关内容