为什么长选项开始用两个破折号开始? (2019)

2021-04-09 07:25:52

1990年左右,Richard Stallman(RMS)和我正在编写GNU C库Getopt(),他想将其扩展为支持用户友好性的长(多字符)选项名称。他认为unix在这方面的劣质的其他操作系统,例如支持长选项的顶部 - 20(可以缩写)。他希望GNU比UNIX更好,同时仍然兼容。有一些程序在UNIX系统上运行,并在所有任一 - 或没有前缀开头的长选项名称,例如查找,但这些语法与Unix Getopt()不兼容,并由Ad-hoc代码解析。

长选项需要使用UNIX约定不会发生冲突的前缀,因此程序可以支持两种类型的选项而不进行歧义。理查德选择了+,因为逻辑上的if - (数学上的少数)是短暂的选择,那么+将是长选项,而且它没有额外的打字。我们创建了一个名为getopt_long()的扩展接口,以支持指定长选项。

但是,当IEEE POSIX shell和Utilities标准在1992年发布时,不允许+语法。 GNU开发人员讨论了通过电子邮件做的事情。我们考虑了 - +作为长选项前缀,但这很难输入,所以我们解决了 - 这不会违反POSIX或UNIX兼容性,并且不难键入。

几个月,GNU Getopt()支持+和 - 允许人们过渡他们的脚本。我非常肯定地支持+在该转换期间可以通过设置环境变量posix_me_harder(RMS与在那里的标准的RMS蠕动)禁用,后来更改为更礼貌的Posixly_corRect,这也禁用识别与位置参数混合的识别选项。

由于GNU软件很受欢迎,解决方案是逻辑,其他人在他们自己的参数解析器中采用了 - 前缀并实现了它的变体。 Perl可能是第一个。