Pike 和 Kernighan 在他们的文章“UNIX 环境中的程序设计”中讨论了如何cat
程序增加控制参数。在某处,虽然不是那篇文章,但有一条关于“cat
从伯克利回来,挥舞着旗帜。这是一个与问题类似的问题echo
开发选项。 (我在 BSD (Mac OS X) 手册页中找到了相关文章的参考cat
:罗布·派克,“UNIX 风格或 cat -v 被认为是有害的”,USENIX 夏季会议论文集,1983 年。另请参阅http://quotes.cat-v.org/programming/)
在他们的《UNIX 编程环境》一书中,Kernighan 和 Pike(是的,又是这两个人)引用了 Doug McIlroy 关于“echo”应该在没有参数的情况下做什么的主题(大约 1984 年):
哲学的另一个问题是什么echo
如果没有给出任何参数,应该这样做 - 具体来说,它应该打印一个空行还是什么也不打印。当前所有echo
我们知道的实现会打印一个空行,但过去的版本不会,并且关于这个主题存在很大的争论。道格·麦克罗伊在关于这个话题的讨论中表达了正确的神秘主义感受:
UNIX 和 Echo
在新泽西州的土地上居住着UNIX,一位美丽的少女,学者们远道而来崇拜她。被她的纯洁所迷惑,所有人都试图拥护她,一个是因为她的贞洁优雅,另一个是因为她优雅的礼貌,还有一个是因为她能敏捷地执行即使在富裕得多的国家也很少完成的艰巨任务。她的心胸如此宽广,性情如此包容,以至于UNIX收养了她的所有追求者,除了最富有的人。很快,许多子孙繁衍生息,繁衍到天涯海角。
大自然本身微笑着,比其他凡人更热切地回应 UNIX。谦逊的人,不懂礼貌,对她很满意echo如此精确和清晰,他们几乎不相信她能用同样的岩石和树林来回答她,这些岩石和树林使他们自己的喊叫声在荒野中变得如此混乱。无论她提出什么要求,兼容的 UNIX 都会完美地回应。
当一位不耐烦的情人问 UNIX“不要回声”时,UNIX 礼貌地张开嘴,什么也不回声,然后又闭上了。
“你这样张嘴,是什么意思?”年轻人问道。从今以后,当你不该回应的时候,永远不要张开嘴!” UNIX 有义务。
“但我想要一场完美的表演,即使你什么也没有回应,”一位敏感的年轻人恳求道,“闭上嘴是不可能发出完美的回应的。” UNIX 不想冒犯任何一方,因此同意对不耐烦的年轻人和麻木不仁的年轻人说不同的话。她称敏感为“无”\n
'.
然而现在当她说‘\n
”,她并不是真的什么也没说,所以她不得不张开嘴两次,一次是说“\n
” 有一次她什么也没说,所以她不高兴这个敏感的年轻人,他立即说道:“\n
对我来说听起来没什么完美的,但第二个却毁了它。我要你拿回其中一件。因此,无法忍受冒犯的 UNIX 同意撤销一些回声,并将其称为“\c
'。现在,敏感的年轻人可以通过要求“听到”完美的回声。\n
' and '\c
' 一起。但他们说,在他听到任何记谱法之前,他就死于过多的记谱法。
Korn shell 引入了(或者至少包括)printf
基于C语言的命令printf()
函数,它使用格式字符串来控制材料的显示方式。它是比复杂格式化更好的工具echo
。但是,由于引文中概述的历史,echo
不再只是回响;它解释给予 echo 的内容。
并将命令行参数解释为echo
毫无疑问,比不解释它们需要更多的代码。基本的 echo 命令是:
#include <stdio.h>
int main(int argc, char **argv)
{
const char *pad = "";
while (*++argv)
{
fputs(pad, stdout);
fputs(*argv, stdout);
pad = " ";
}
fputc('\n', stdout);
return 0;
}
还有其他方法可以实现这一目标。但更复杂的版本echo
在打印任何内容之前必须仔细检查他们的论点 - 这需要更多代码。不同的系统决定对其参数进行不同数量的解释,从而产生不同数量的代码。