【发布时间】:2019-06-18 21:02:03
【问题描述】:
fish function 内置选项-a/--argument-names 允许将参数绑定到名称。
在使用 argparse 内置函数的同时仍然可以这样做吗?如果有,怎么做?
【问题讨论】:
标签: shell parsing arguments fish
fish function 内置选项-a/--argument-names 允许将参数绑定到名称。
在使用 argparse 内置函数的同时仍然可以这样做吗?如果有,怎么做?
【问题讨论】:
标签: shell parsing arguments fish
我设计并实现了argparse。是的,从技术上讲,您可以在同一个函数中使用--argument 标志和argparse,但这样做没有任何意义。 --argument 选项完全独立于argparse 运行,并且不知道标志。创建以下函数:
function x -a arg1 -a arg2
set --show arg1 arg2 argv
end
现在调用它:x --flag val arg。请注意,--flag 绑定到 arg1,val 绑定到 arg2,argv 仍然包含传递给函数的所有参数。如果你的函数有标志,你不应该使用--argument。如果不是,那么使用argparse 就没有任何意义。
【讨论】:
argparse 而不是--argument。而--argument 本身在任何情况下都不是真正需要的。它只是在函数内部执行set -l arg1 $argv[1]、set -l arg2 $argv[2] 等的语法糖。看看一些使用argparse 的标准自动加载函数;例如,alias.fish.
argparse 完成后 $argv 删除了所有非位置参数;即,它将仅包含位置参数。因此,如果给它们提供有意义的名称可以提高函数的清晰度,只需在 argparse 调用之后执行 set -l var_name1 $argv[1] 等。我怀疑以这种方式使argparse 复杂化是否合理。特别是因为您必须为位置参数的数量与 var 名称的数量不匹配时发生的情况定义规则。