首页 > 解决方案 > 在 GetOptions 中插入和使用未知选项

问题描述

我正在尝试创建一个获取参数的脚本(用 Perl 编写)。调用应如下所示:

./script [action] --option1 --option2 ... --optionK 

GetOptions:Long为此使用模块。我也使用$ARG[0]来获得行动。例子:

./script report --color black --version 19.4

现在我想赋予用户插入他想要的任何命令的权力(例如,它可以插入另一个带参数的脚本)。我想这样做:用户可以在命令行参数的末尾(仅)插入他想要的任何内容,例如:

./script report --color black --version 19.4 more and more --info 551_5 from --the user

我想解析这个数组@ARGV并将附加信息插入到一个变量中:

$additional = "more and more --info 551_5 from --the user"

我发现在使用 之后,它会从数组GetOptions中删除那些选项(不包括$ARGV[0]) 。@ARGV问题是,我真的不知道如何从数组中获取附加信息。也许我应该添加一个额外的选项,如下所示:

./script report --color black --version 19.4 --additional more and more --info 551_5 from --the user

并把所有东西都放进去additional。但是这样一来,我又遇到了另一个问题——它会将--info--the视为参数。

我该如何解决这个问题?

编辑:我看到pass_through可以使用。但是,如果用户有一个类似于我的可用选项之一的选项怎么办?它可以解决一些问题。是否可以像处理字符串一样处理它?同样以这种方式,我将不得不解析@ARGV和删除$ARGV[0](动作)。

EDIT-2:该--方法将起作用。但在我看来,这是一种解决方法,而不是解决这个问题的正确方法。必须有一种更清洁的方法来做到这一点。也许换成不同的模块?

标签: perl

解决方案


您可以使用--来分隔其他参数:./script --option1 --option2 -- --userOption1 --userOption2

https://metacpan.org/pod/Getopt::Long#Mixing-command-line-option-with-other-arguments


推荐阅读