空头选项和多头选项的区别只有`-`?

Nan*_*iao 3 command-line options

Unix系统上,选项开头-是短选项,而选项开头--是长选项。我的理解对吗?

Wou*_*lst 7

这是 GNU 编码标准的一部分,因此所有 GNU(以及许多非 GNU)软件都遵循它。然而,这绝不是一个绝对的标准;还有其他实现方式,例如:

  • -Wlong-option: 源自 C 编译器,并在 POSIX 中如此指定。
  • -long-option (即,单破折号):大多数没有任何短选项的应用程序(通常作为双破折号版本的替代品)支持。
  • +long-option:这已经过时了,但是有一些旧的软件包为短选项保留了破折号,为长选项保留了加号。今天用得不多,主要是因为大多数 getopt() 实现不支持它
  • long-option:不幸的是,也有一些应用程序将选项参数混淆。我相信 MegaCLI 是那里的犯罪者之一(无论如何,它几乎在所有其他方面都是犯罪者)。


sch*_*ily 5

--long-opt方法是 1990 年左右发起的 GNU 主义。

Multics使用-long带有单个破折号的选项,Multics 项目始于 1960 年代。

UNOS是第一个UNIX克隆(由一群前 AT&T 员工于 1980 年发起)并于 1982 年 4 月UNOS引入了通用选项解析器(UNIX世界上第一个)。该选项解析器支持-long带有单个破折号的选项。

AT&Tgetopt()在 1983 年和 1984 年之间引入,但getopt()在 1989 年为 Bourne Shell 的内置getopts.

POSIX使用一个破折号实现看起来像长选项的操作数testfind

AT&T UNIX-long在 1983 年左右引入了使用单个破折号的选项,同时允许例如kill -INT <pid>.

tar并且ar根本没有option在他们的文档中使用这个词,而是使用了这个词keyletter。后来,实现者添加了-对被忽略的密钥字母的支持,给人的印象是 y CLI 可能看起来像其他 UNIX 命令。

dd使用自己的期权模型,但该期权模型与长期权模型兼容,该模型UNOS将长期权定义为以下形式:

  • -long
  • -long arg
  • long=arg
  • -long=arg
  • long= arg
  • -long= arg

UNOS选项解析器优于GNU longopt实现,因为它使用一个格式字符串,允许自动转换整数和布尔参数,并因为它允许在需要时实现回调函数ENY选项。由于回调函数接口,不需要重新排序参数列表。

getopt()自 2004 年以来,Solaris实现支持长选项作为短选项的别名,但并未真正记录它,即使它自引入以来可被Bourne Shell通孔使用getopts(1)

Schily Bourne Shell文档记录了此功能,此外还引入了进一步的getopt()增强功能,允许长选项不仅仅是短选项的别名,还允许单破折号长选项。

请参阅内置命令部分中的http://schillix.sourceforge.net/man/man1/bosh.1.htmlgetopts.

基于选项解析器思想的现代化和增强的UNOS选项解析器位于 schily-tools 中libschily/getargs.c

http://sourceforge.net/projects/schilytools/files/

它用于不基于 AT&T 代码的 schily 工具程序中,并且会减少不满意定义的选项名称的问题,例如 mkisofs