linux GNU getopt:忽略未知的可选参数?

use*_*744 7 linux bash getopt

使用GNU getopt可以忽略未知的可选参数吗?

我有一个脚本scriptA.sh,它有可选的参数--optA, --optB, --optC, --optD.

我想写一个包装器,wrapperA,带有两个可选参数--optX and --optY,即调用scriptA.但是,我不想在包装器中声明scriptA的所有可选参数.

特别是,如果在里面wrapperA,我指定可选参数

getopt --longoptions optX:,optY:
Run Code Online (Sandbox Code Playgroud)

电话

wrapperA --optX --optA --optB
Run Code Online (Sandbox Code Playgroud)

返回错误

getopt: unknown option -- optA
Run Code Online (Sandbox Code Playgroud)

是否可以强制GNU getopt忽略未知参数并将它们放在输出中的' - '之后?

les*_*ana 6

无法告诉GNU getopt忽略未知选项.如果您真的想要该功能,则必须编写自己的选项解析器.

只是忽略未知选项并不简单.你怎么知道一个未知的选项是否参与了争论?

原始脚本的示例用法:

originalscript --mode foo source
Run Code Online (Sandbox Code Playgroud)

foo是选项的一个参数--mode.while source是"非选项参数"(有时称为"位置参数").

包装脚本的示例用法:

wrapperscript --with template --mode foo source
Run Code Online (Sandbox Code Playgroud)

getopt如何wrapperscript知道它应该--mode一起忽略foo?如果它只是忽略--mode那么originalscript将获得foo作为第一个位置参数.

一种可能的解决方法是告诉包装器脚本的用户在双短划线(--)后写入原始脚本的所有选项.按照惯例,双破折号标志着选项的结束.GNU getopt识别双破折号并停止解析并将其余部分作为位置参数返回.

也可以看看: