GNU Coreutils `\time --version` 和 `/bin/true --version` 可以工作,但是 `\true --version` 不行?

GNU Coreutils `\time --version` 和 `/bin/true --version` 可以工作,但是 `\true --version` 不行?
$ \time --version
time (GNU Time) UNKNOWN
Copyright (C) 2018 Free Software Foundation, Inc.
...

$ /bin/true --version
true (GNU coreutils) 8.32
Copyright (C) 2020 Free Software Foundation, Inc.
...

$ \true --version

$ echo 'nothing was printed on the previous line'

我使用的是 Ubuntu 22.04,GNU bash,版本 5.1.16(也使用 zsh 5.9 进行了测试)。

答案1

在重击中time是一个关键字(参见type time)并且\time不被这样解释。\time使 Bash 运行外部可执行文件,在您的情况下是 GNU time

true它是一个内置的(参见 参考资料type true)。事实上,您可以使用反斜杠来抑制time关键字(或任何关键字,例如 try \if),这一事实可能会误导您认为可以使用反斜杠来抑制内置函数。不,\true仍然运行内置函数,而不是 GNU true。这是非常明显的\:;它运行:内置的,而不是外部:可执行文件最有可能的您的操作系统中不存在(比较type -a :type -a true或尝试env :)。

help true描述了内置函数,但没有提到任何选项。

如何true决定采取哪种行为?

似乎内置函数会忽略所有命令行参数,无论它们是什么。 GNUtrue忽略所有命令行参数,除非只有一个参数并且该参数是--helpor --version

在 Zsh 中,故事基本相同。

相关内容