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

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

为什么使用带有( )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 连接不是。

相关内容