为什么使用带有( )dd
的参数而不是类似的更常见的方法?=
if=/dev/zero
-i /dev/zero
我只是好奇是否有人知道这种风格的历史原因或优缺点。
故事时间:当我开始开发软件时,我不知道自己在做什么,并使用了这种dd
风格,因为它对我来说在 C# 库中实现更容易。(像大多数开发人员一样,我仍然什么都不知道。只是如何使用 Google、StackOverlow 和复制粘贴。)
答案1
POSIX在其基本原理部分提到以下内容dd
:
当然,许多操作数可以设计为使用实用程序语法指南,这将导致经典的连字符选项字母。在 POSIX.1-2017 本卷的这个版本中,DD由于大量应用程序依赖于历史实现,因此保留了其奇怪的类似 JCL 的语法。
对 JCL 的引用与中的描述相呼应行话文件(该条目将“dd”描述为动词,但此引用是针对dd
实用程序的)1:
Unix dd(1) 的设计采用了一种奇怪的、明显非 Unixy 的关键字选项语法,让人想起 IBM System/360 JCL(它有一个针对 I/O 设备的精心设计的 DD“数据集定义”规范)
已故的丹尼斯·里奇写道
dd 始终以 JCL dd 卡命名。
该线程包括一个示例JCL数据定义:
//JOB SMILEY
//EXEC CCLG
//SYSPARM DD DSN=USR.LOCAL.INCLUDE.STDIO,DISP=SHR
//SYSIN DD *
MAIN()
{
PRINTF("HELLO, WORLD\N");
}
/*
//
也可以看看这个 TUHS 线程关于破折号选项在哪里Andrew Warkentin 引用了 JCL 式key=value
选项。
就优缺点而言,dd
样式选项比典型的破折号样式有一大优势:所有程序参数都是明确的。 “传统”命令,例如rm
混合破折号前缀的选项和文件名;由于在 Unix 风格的系统上文件名也可以以破折号开头,这意味着并不总是能够确定给定的参数是选项还是文件。这是可以解决的,但dd
样式选项完全避免了这个问题。 (为了增加乐趣,GNUdd
支持非dd
样式选项,--help
并且--version
。)
1 此行话文件条目的整体准确性有争议,但 JCL 连接不是。