臃肿的 echo 命令

2023-11-27

看一下“echo”命令的以下实现:

  • http://bxr.su/o/bin/echo/echo.c(开放BSD)

  • http://bxr.su/d/bin/echo/echo.c(蜻蜓)

  • http://bxr.su/n/bin/echo/echo.c(网络BSD)

  • http://bxr.su/f/bin/echo/echo.c(自由BSD)

  • http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/echo.c (GNU)

当您查看列表时,我相信您会注意到每个实现中的臃肿程度不断增加。 a 有什么意义272 line回显程序?


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在打印任何内容之前必须仔细检查他们的论点 - 这需要更多代码。不同的系统决定对其参数进行不同数量的解释,从而产生不同数量的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

臃肿的 echo 命令 的相关文章

随机推荐

  • 使用箭头键,并在 Angular 中使用 keyup

    我有一个 Angular 项目 我想为箭头键实现一些功能 我尝试使用类似的东西 keyup keyCode Move itemArray UP 其中 keyCode 代表箭头键之一的代码 但是没有任何作用 这是我使用它的模板 模板 HTML
  • GMSAutocompleteViewController 仅显示 5 个结果

    我综合了GMS自动完成视图控制器在我的应用程序中 let autocompleteController GMSAutocompleteViewController autocompleteController delegate self l
  • 关于十六进制形式的 EXIF 的问题

    我试图了解 jpeg 文件 十六进制 的 EXIF 标头部分以及如何理解它 以便我可以提取数据 特别是 GPS 信息 无论好坏 我正在使用 VB Net 2008 抱歉 这是我现在能掌握的 我已将 jpg 的前 64K 提取到字节数组中 并
  • 如何使函数异步信号安全?

    我有以下内容sigaction处理函数 void signal term handler int sig printf EXIT TERM signal Received n int rc flock pid file LOCK UN LO
  • 无法安装 Commonmarker gem(jekyll 需要)macos

    我该怎么办 依赖性有问题吗 我该如何解决这些问题 我在卡特琳娜 我反复收到此错误 并且已经查找过该目录 不存在 sudo bundle update Password Fetching gem metadata from https rub
  • Linux - 串口读取返回EAGAIN

    我在从按以下方式打开的串行端口读取一些数据时遇到一些问题 我已经多次使用这个代码实例 并且一切正常 但现在 由于某种我无法弄清楚的原因 我完全无法从串行端口读取任何内容 我能够写入并且所有内容都在另一端正确接收 但从未收到回复 正确发送 不
  • 文件 stat() 与 access() 检查目录权限

    我已经成功使用了两者stat access 单独确定用户是否具有对目录的读或读 写访问权限 我的问题是 有首选方法吗 我看到很多例子使用stat 但就我的目的而言 访问似乎更轻量级并且符合目的 其中之一是否存在任何问题 例如安全 我的方法有
  • SMPP 中“data_coding”字段的含义

    是什么意思 数据编码 领域中的SMPP协议 我搜索了此内容 但找不到任何有用的资源 简而言之 数据编码包含有关 smpp 中的文本如何处理的信息 SubmitSM 即典型的 SMS 消息 消息被编码 SubmitSM 数据包 包含二进制编码
  • 单击按钮时切换字体很棒的类

    我的代码如下jsfiddle 我希望使用 JavaScript 在按钮单击时更改字体很棒的图标 但它似乎不起作用 我是 javascript 新手 所以如果这是一个愚蠢的问题 请原谅我 HTML
  • Android 从服务中打开浏览器,避免多个选项卡

    我正在尝试通过在浏览器的当前选项卡中打开的链接从我的服务打开浏览器窗口 当我使用 Intent intent new Intent Intent ACTION VIEW Uri parse http www google com inten
  • 我可以在 rcParams 中设置脊柱和刻度吗?

    我倾向于在 Matplotlib v1 3 1 图中使用以下轴选项 ax spines top set visible False ax spines bottom set visible True ax spines right set
  • Angular - 将组件方法绑定到 DOM 目标属性是错误的做法吗?

    比如说 我有一个组件 其用途如下
  • C# 中的嵌入资源字体无法正常工作

    我嵌入了一个 ttf字体文件 特别是 Amatic Bold 在我的资源中 我使用下面的代码来获取字体 我尝试了这篇文章中的代码 如何在我的 C 应用程序中嵌入字体 使用 Visual Studio 2005 这是我的实现 static p
  • HtmlAgilityPack 中的 NullReferenceException

    我正在尝试提取一个link using xpath从下面提到的网址 string url http www album cover art org search php q Ruin Live Album Version Lamb of G
  • 如何实现均衡器

    我知道 so 中有很多关于均衡器的问题 但我没有得到我想要的东西 我想做的是一个均衡器 用于以如下方式修改音频样本 equalizer eqAudio audiosamples band gain 我不确定这是否是我想要的确切接口 因为我对
  • 设计无密码更新用户

    我想在设备中更新没有密码的用户属性 这种情况就像 如果密码和密码确认字段不为空 那么我需要设计错误 如果它们为空 则需要更新其他用户属性 我怎样才能用 devise 做到这一点 提前致谢 我认为这是一个更好的解决方案 if params u
  • Qt 的 Visual Studio 集成工具有什么区别?

    Trolltech 发布了一款名为 Visual Studio 插件 表彰他们的 Qt LGPL 和 GPL 版本 他们声称商业版本附带了完整的 Visual Studio 集成工具 但我没有看到任何关于它们之间差异的描述 完整版中包含哪些
  • 客户端套接字 - 获取 IP - java

    我正在使用套接字实现 TCP 连接 我需要在服务器端获取客户端套接字的 IP 我已经用过socketName getRemoteSocketAddress 它确实返回了 IP 地址 后跟我正在使用的端口 ID 我怎样才能只获取地址而不获取端
  • 忽略其他类的 System.exit()

    鉴于下面的课程 public class ClassOne public static void main String args System exit 1 假设调用 ClassOne main 后还有其他事情要做 下面的类也将被销毁 p
  • 臃肿的 echo 命令

    看一下 echo 命令的以下实现 http bxr su o bin echo echo c 开放BSD http bxr su d bin echo echo c 蜻蜓 http bxr su n bin echo echo c 网络BS