(请注意,这完全是一个学术问题......我只是对答案感到好奇,而不是试图解决任何特定问题。)
从ECHO(1)
手册页(GNU echo
):
注意:您的 shell 可能有自己的 echo 版本,它通常会取代此处描述的版本。请参阅您的 shell 文档,了解有关其支持的选项的详细信息。
从ECHO(1)
手册页(BSD echo
):
某些 shell 可能提供与此实用程序类似或相同的内置 echo 命令。最值得注意的是,sh(1) 中的内置 echo 不接受 -n 选项。请参阅内置(1) 手册页。
echo
从 shell运行时,会运行内部命令,但指定完整路径,例如/bin/echo
,运行外部程序。
让 shell 本身实现该特定命令的理由是什么?肯定有一些命令必须由 shell 实现(例如cd
,read
等等)但是为什么呢echo
?是因为它使用得如此频繁,并且避免流程设置和上下文切换所节省的时间是可衡量的——尤其是历史上?
bash
忽略eg具有大量非严格必要的功能这一事实,如果速度因素很重要,为什么像expr
, [
/ test
, mkdir
,rmdir
等不将其放入 shell 中呢?像mkdir
and 之类的东西,rmdir
其实现几乎实际上是对函数的一次调用,libc
似乎是显而易见的包含候选者。
答案1
速度因素是原因之一。这对于通常在没有任何文件参数(如echo
、test
、等)的情况下使用的命令尤其有意义。printf
因此,它们可以在没有任何文件访问的情况下完成,既不读取任何文件参数也不读取命令本身。
其他命令kill
也受益于支持 shell 作业控制语法,例如kill %1
.
有些 shell 甚至实现其他“更高级别”的命令,例如mv
用于zsh
添加简单 shell 样式模式重命名等功能的命令。