短选项和长选项的区别只是“-”?

短选项和长选项的区别只是“-”?

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

答案1

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

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

答案2

--long-opt方法是 1990 年左右发起的 GNUism。

Multics使用-long带有单个破折号的选项,Multics 项目于 20 世纪 60 年代启动。

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

AT&Tgetopt()在 1983 年到 1984 年间引入,但getopt()在 1989 年为 Bourne Shell 的内置 引入额外的第四个全局变量之前,它是不可重入的getopts

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

AT&T UNIX1983 年左右引入了-long使用单个破折号的选项,同时允许例如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 实现,因为它使用允许自动转换整数和布尔参数的格式字符串,并且允许根据需要为任何选项实现回调函数。由于回调函数接口,无需重新排序参数列表。

自 2004 年起, Solarisgetopt()实现就支持长选项作为短选项的别名,但并没有真正记录它,尽管自引入以来它可以通过Bourne Shellvia使用。getopts(1)

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

http://schillix.sourceforge.net/man/man1/bosh.1.html在内置命令部分中getopts.

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

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

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

相关内容