Gnu 膨胀回波命令
查看“echo”命令的以下实现:Gnu 膨胀回波命令,gnu,freebsd,openbsd,netbsd,dragonfly-bsd,Gnu,Freebsd,Openbsd,Netbsd,Dragonfly Bsd,查看“echo”命令的以下实现: (OpenBSD) (蜻蜓) (NetBSD) (FreeBSD) (GNU) 当您查看列表时,我相信您会注意到每个实现中的膨胀越来越大。 272线的回声节目有什么意义?你会注意到实际上没有那么多膨胀的增长 大多数代码行都是注释 大多数不是注释的代码行都是使用说明文档,所以当有人说“echo--help”时,它会做一些事情 上述代码之外的代码似乎主要处理echo可以接受的参数,以及将符号(如\n和\t)的“特殊”扩展为它们的等效字符,而不是按字面上的方式进行
- (OpenBSD)
- (蜻蜓)
- (NetBSD)
- (FreeBSD)
- (GNU)
272线的回声节目有什么意义?你会注意到实际上没有那么多膨胀的增长
/bin/echo--help
才能从中获取所有高级功能/文档,因为echo--help
仅仅是echo的--help
举个好例子,在shell中运行它
echo '\e[31mhello\e[0m'
然后运行以下命令:
echo -e '\e[31mhello\e[0m'
你会注意到截然不同的结果
前者只按原样发出输入,而后者将打印红色的hello
另一个示例,使用“十六进制”代码:
$echo '\x64\x65\x66'
\x64\x65\x66
$echo -e '\x64\x65\x66'
def
截然不同的行为。openbsd实现不能满足这一要求。在他们的文章“UNIX环境中的程序设计”中,Pike和Kernighan讨论了
cat
程序如何增加控制参数。在某个地方,虽然不是那篇文章,但有一条评论是关于“cat
从伯克利回来挥舞旗帜”。这与echo
开发选项的问题类似。(我在BSD(Mac OS X)手册页上找到了一篇相关文章,内容为cat
:Rob Pike,“UNIX风格,或被认为有害的cat-v”,USENIX Summer Conference Proceedings,1983年。另见)
Kernighan&Pike(是的,又是这两位)在他们的书《UNIX编程环境》中引用了Doug McIlroy关于“echo”在没有参数的情况下应该做什么的主题(大约1984年):
哲学的另一个问题是,如果没有给出任何参数,echo
应该做什么?具体来说,它应该打印一个空行还是什么都不打印。我们所知道的所有当前的echo
实现都只打印一个空行,但过去的版本没有打印,并且在这个问题上有很大的争论。道格·麦克罗伊(Doug McIlroy)在讨论这一主题时传达了正确的神秘主义情感:
UNIX和Echo
在新泽西州的土地上,居住着一位美丽的少女,萨凡特远道而来,崇拜她。她的纯洁让人眼花缭乱,所有人都试图支持她,一个是因为她纯洁的优雅,另一个是因为她优雅的礼貌,还有一个是因为她在执行即使在更富裕的国家也很少完成的艰巨任务时的敏捷。她心胸宽广,性情随和,UNIX收养了她的求婚者中除最令人难以忍受的富人外的所有人。很快,许多后代成长、繁衍并传播到了地球的尽头
大自然自己也微笑着,比其他凡人更热切地回应UNIX。谦卑的人们,谁知道更多的宫廷礼仪知之甚少,高兴于她的回声,如此精确和水晶般清晰,他们几乎不相信她可以回答同样的岩石和树林,使他们自己的呼喊进入荒野如此混乱。她被问到的问题都得到了完美的回应
当一个不耐烦的天鹅问UNIX“什么也不回”时,UNIX顺从地张开嘴,什么也不回,又闭上了嘴
“你这是什么意思,”年轻人问道,“就这样张嘴?从今以后,当你应该什么都不回应的时候,千万不要开口而UNIX公司也有责任
“但是我想要一个完美的表演,即使你什么都不回应,”一个敏感的年轻人恳求道,“闭着嘴也不能发出完美的回应。”UNIX不想冒犯任何一个,同意对不耐烦的年轻人和麻木不仁的年轻人说不同的话。她称这个敏感的东西为“\n
”
但是现在当她说“\n
”时,她并不是什么都没说,所以她不得不张开嘴两次,一次说“\n
”,一次什么都没说,所以她没有取悦这个敏感的年轻人,他立刻说,“\n
对我来说听起来像是一个完美的无足轻重的东西,但第二次却毁了它。”。我想让你拿回其中的一个。”因此,不能容忍冒犯的UNIX同意撤销一些回音,并称之为“\c
”。现在,敏感的年轻人可以通过同时要求“\n
”和“\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;
}
#包括
int main(int argc,字符**argv)
{
const char*pad=“”;
而(*++argv)
{
FPUT(焊盘、标准件);
FPUT(*argv,标准输出);
pad=“”;
}
fputc('\n',stdout);
返回0;
}
还有其他方法可以实现这一点。但是,echo
的更复杂版本在打印任何内容之前必须仔细检查它们的参数,而这并不意味着