为什么 shell 在内部实现自己的“echo”命令?

为什么 shell 在内部实现自己的“echo”命令?

(请注意,这完全是一个学术问题......我只是对答案感到好奇,而不是试图解决任何特定问题。)

ECHO(1)手册页(GNU echo):

注意:您的 shell 可能有自己的 echo 版本,它通常会取代此处描述的版本。请参阅您的 shell 文档,了解有关其支持的选项的详细信息。

ECHO(1)手册页(BSD echo):

某些 shell 可能提供与此实用程序类似或相同的内置 echo 命令。最值得注意的是,sh(1) 中的内置 echo 不接受 -n 选项。请参阅内置(1) 手册页。

echo从 shell运行时,会运行内部命令,但指定完整路径,例如/bin/echo,运行外部程序。

让 shell 本身实现该特定命令的理由是什么?肯定有一些命令必须由 shell 实现(例如cdread等等)但是为什么呢echo?是因为它使用得如此频繁,并且避免流程设置和上下文切换所节省的时间是可衡量的——尤其是历史上?

bash忽略eg具有大量非严格必要的功能这一事实,如果速度因素很重要,为什么像expr, [/ test, mkdir,rmdir等不将其放入 shell 中呢?像mkdirand 之类的东西,rmdir其实现几乎实际上是对函数的一次调用,libc似乎是显而易见的包含候选者。

答案1

速度因素是原因之一。这对于通常在没有任何文件参数(如echotest、等)的情况下使用的命令尤其有意义。printf因此,它们可以在没有任何文件访问的情况下完成,既不读取任何文件参数也不读取命令本身。

其他命令kill也受益于支持 shell 作业控制语法,例如kill %1.

有些 shell 甚至实现其他“更高级别”的命令,例如mv用于zsh添加简单 shell 样式模式重命名等功能的命令。

相关内容