为什么 `dd` 在其参数中使用 `=`?

Jan*_*ann 24 dd history

为什么dd使用带有=( if=/dev/zero) 的参数而不是类似的更常见的方法-i /dev/zero

我只是好奇是否有人知道这种风格的历史原因或优缺点。

故事时间:当我开始开发软件时,我不知道自己在做什么,并使用了这种dd风格,因为它对我来说在 C# 库中实现更容易。(像大多数开发人员一样,我仍然什么都不知道。只是如何使用 Google、StackOverlow 和复制粘贴。)

Ste*_*itt 25

POSIX在其基本原理部分提到了以下内容dd

\n
\n

当然,许多操作数可以设计为使用实用程序语法指南,这将导致经典的连字符选项字母。在 POSIX.1-2017 卷的这个版本中,由于大量应用程序依赖于历史实现,dd保留了其奇怪的类似 JCL 的语法。

\n
\n

对 JCL 的引用与行话文件中的描述相呼应(条目将 \xe2\x80\x9cdd\xe2\x80\x9d 描述为动词,但此引用是针对dd实用程序的):

\n
\n

Unix dd(1) 的设计采用了一种奇怪的、明显非 Unixy 的关键字选项语法,让人想起 IBM System/360 JCL(它有一个精心设计的 DD \xe2\x80\x98Dataset Definition\xe2\x80\x99 I/O 规范)设备)

\n
\n

已故的丹尼斯·里奇写道

\n
\n

dd 始终以 JCL dd 卡命名。

\n
\n

该线程包含JCL 数据定义的示例:

\n
//JOB SMILEY\n//EXEC CCLG\n//SYSPARM DD DSN=USR.LOCAL.INCLUDE.STDIO,DISP=SHR\n//SYSIN DD *\nMAIN()\n{\nPRINTF("HELLO, WORLD\\N");\n}\n/*\n//\n
Run Code Online (Sandbox Code Playgroud)\n

另请参阅有关破折号选项的 TUHS 线程,其中Andrew Warkentin引用了 JCL 样式key=value选项。

\n

就优缺点而言,dd样式选项比典型的破折号样式有一大优势:所有程序参数都是明确的。\xe2\x80\x9c传统\xe2\x80\x9d命令,例如rm混合破折号前缀的选项和文件名;由于在 Unix 风格的系统上文件名也可以以破折号开头,这意味着 \xe2\x80\x99 并不总是可以决定给定的参数是选项还是文件。这是可以解决的,但dd样式选项完全避免了这个问题。(为了增加乐趣,GNUdd支持非dd样式选项,--help并且--version。)

\n

  • @ilkkachu mjg59 不久前构建了一个[具有历史的术语文件存储库](https://github.com/mjg59/jargon);请参阅[`dd`条目的历史](https://github.com/mjg59/jargon/commits/master/dd)。“dd”条目是在 ESR 的第一个修订版 (2.1.1) 中添加的。 (6认同)
  • 行话文件还需要一个“[需要引用]”来声称这是一个恶作剧:)(可能是这样,只是没有证据表明这一点。文件本身是/已经被“a”编辑过的,这并没有帮助。人数”。) (3认同)
  • @ilkkachu是的,我反对严格的“dd”样式(其中每个参数都是“key=value”,因此包含“=”的文件名仍然由“key=”引入)和传统的破折号样式,其中选项和文件名只能混合。 (2认同)