在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&T
getopt()
在 1983 年到 1984 年间引入,但getopt()
在 1989 年为 Bourne Shell 的内置 引入额外的第四个全局变量之前,它是不可重入的getopts
。
POSIX
实现看起来像长选项的操作数,带有一个破折号test
和find
AT&T UNIX
1983 年左右引入了-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 Shell
via使用。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