为什么“ echo --help”没有给我回声的帮助页面?


20

我在Bash中尝试了“ man echo”,它告诉我“ echo --help”将显示帮助然后退出,类似地,“ echo --version”将输出版本并退出。但是为什么它不起作用?'echo --help'只是简单地按字面意义打印'--help'。


2
请注意,通过生成帮助消息echo --help是一个错误。想象一下,如果您这样做会发生什么:printf "The option you entered is: " ; echo "$opt"并且shell变量opt恰好包含text --help。根据POSIX标准,echo不允许以这种方式运行,但是GNU回声令人讨厌地不一致。
R ..

1
@R ..所以,echo -e并且echo -n也是一个错误,你的逻辑?
Tyilo 2014年

@Tyilo:见POSIX,或者我这里的问题的报道规格:etalabs.net/sh_tricks.html
R.,

@R ..想象一下如果执行以下操作会发生什么:printf“您输入的选项是:”; 回显“ $ opt”,shell变量opt恰好包含文本-e或-n。
Tyilo 2014年

@Tyilo:我喜欢重新解释这个问题的答案,而不是重新解释它。
R..

Answers:


26

man echoecho程序有关。GNU echo 支持一个--help选项,其他一些也支持。当您echo在Bash中运行时,您会获得其内置的文件echo,而不是内置的

要访问echo程序而不是内置程序,可以给它提供一个路径:

/bin/echo --help

或使用Bash的enable命令禁用内置版本:

$ enable -n echo
$ echo --help

Bash具有许多基本命令的内置版本,因为这样做的速度要快一些,但是您始终可以在需要时像这样绕过它们。


为我服务正确zshenable确实可以。
迈克尔·荷马2014年

@MichaelHomer所以某些内置版本可能与...原始版本不同?如果存在差异,那么所有原始命令的名称是什么,包括您提到的“ echo program”?或者我们用什么术语将它们与内置版本区分开?
booksee'9

1
@booksee:是的,它们可以有所不同。echo特别是GNU 在POSIX之上有很多扩展,而Bash echo只是少数。对于内置函数可能掩盖的命令,我确实没有想到一个通用名称。有没有这么多,你需要一个:echotest[,和pwd你很可能会遇到的人。
迈克尔·荷马2014年

@Gnouc:是的,command明确地总是调用内置函数。我不知道我在想什么,除了那zsh是另一种方式。
迈克尔·荷马2014年

2
伙计们,“使用Bash的enable命令禁用”是这样
Braiam 2014年


8

您正在使用echobash 的内置命令,该命令不了解该--help选项。采用:

/bin/echo --help

要查看内置帮助echo,请使用man bash和搜索echo


这个工作对我来说
海登思林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.