鱼壳argparse做某事非常意外

我正在OS X 10.14.5上运行fish 3.1.0。

我是新来的鱼和argparse。我都喜欢。

以下简单的测试代码:

#!/usr/local/bin/fish

function afoo 
    set -l options (fish_opt -s h -l help)
    set options $options (fish_opt -s m -l max --required-val)
    set options $options (fish_opt -s n -l nnn --optional-val)

    argparse $options -- $argv

    echo "max" $_flag_max
    echo "nnn" $_flag_nnn
end

应创建两个开关m和n。 m 必须取值,而n 可以取值。

在终端的CLI中测试基本功能时,这是一个简单的屏幕抓取:

[/usr/local/bin/fish 3.1.0] ~ afoo -m foo -n baz
max foo
nnn
[/usr/local/bin/fish 3.1.0] ~ afoo -mfoo -nbaz
max foo
nnn baz
[/usr/local/bin/fish 3.1.0] ~ 

为什么argparse 解析-n开关及其参数之间的空间,却 解析-m开关及其参数之间的空间?

这真让我发疯。我已经阅读了十多次文档。我在做什么错了?

P.S。开关的顺序无关紧要。

cxl13461615166 回答:鱼壳argparse做某事非常意外

为什么argparse不能解析-n开关及其参数之间的空间,却可以解析-m开关及其参数之间的空间?

-n采用一个可选参数。根据getopt约定,这些必须直接附加到option参数。

例如

echo never | grep --color never

这不会禁用颜色,而是将颜色设置为 auto (默认无参数值)并查找字符串“ never”。因此它将以红色显示“从不”。取而代之的是,您必须使用--color=never(或者如果它有一个简短的选项“ -c”,那么“ -cnever”也可以接受)。

Argparse的行为就像通常的unix getopt(3)选项解析一样,它也在幕后使用,因为这就是系统其余部分的行为。

,

这是因为n/nnn=?有一个可选参数,而m/max=有一个必需参数。这些字符串是您对fish_opt的调用的输出。

成功运行$argv后,非选项参数将存储在argparse中。因此,您的baz$argv结尾。

,

太好了!非常非常感谢。

如果您是像我这样的新手,则可以通过在堆栈溢出中搜索“ getopt space可选参数”来找到有关这些答案的详细信息。

本文链接:https://www.f2er.com/2432697.html

大家都在问