[英]Fish Shell argparse Doing Something Very Unexpected
我在 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 中测试基本 function 时的简单屏幕截图:
[/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 开关及其参数之间的空格?
这让我发疯了。 我已经阅读了十几遍文档。 我究竟做错了什么?
PS开关的顺序无关紧要。
为什么 argparse 不解析 -n 开关及其参数之间的空格,但它解析 -m 开关及其参数之间的空格?
-n
采用可选参数。 根据 getopt 约定,这些必须直接附加到选项参数。
看看例如
echo never | grep --color never
这不会禁用颜色,而是将颜色设置为自动(默认无参数值)并查找字符串“never”。 所以它会用红色显示“从不”。 相反,您必须使用--color=never
(或者如果它有一个简短的选项“-c”,那么“-cnever”也可以接受)。
Argparse 的行为类似于通常的 unix getopt(3) 选项解析,它也在幕后使用,因为这就是系统的 rest 的行为方式。
这是因为n/nnn=?
有一个可选参数,而m/max=
有一个必需参数。 这些字符串是您调用 fish_opt 的fish_opt
。
成功运行argparse
后,非选项 arguments 存储在$argv
中。 所以你的baz
最终会出现在$argv
中。
太好了,非常感谢。 非常。
如果您是像我这样的新手,您可以通过在堆栈溢出中搜索“getopt space optional argument”来找到有关这些答案指向的更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.