Shell 将argparse use移到单独的函数中
我有一个关于Shell 将argparse use移到单独的函数中,shell,environment-variables,fish,Shell,Environment Variables,Fish,我有一个关于argparse功能的问题。我对自定义函数使用argparse,这很好,但有时我想将argparse和补充代码的使用转移到一个单独的函数中,并在那里使用它来减少样板文件/视觉噪音 这是我想做的部分示例: function A set --local options ... # some definition. argparse_wrapper --name A $options -- $argv; or return 1 end 而不是 function A s
argparse
功能的问题。我对自定义函数使用argparse
,这很好,但有时我想将argparse
和补充代码的使用转移到一个单独的函数中,并在那里使用它来减少样板文件/视觉噪音
这是我想做的部分示例:
function A
set --local options ... # some definition.
argparse_wrapper --name A $options -- $argv; or return 1
end
而不是
function A
set --local options ... # some definition.
argparse --name A $options -- $argv; or return 1
# Code validating flags set by argparse in some way that argparse is unable to do,
# i.e. validation that requires values from two flags (so f/flag!script would not
# work).
#
# Or, changing flag names to names more appropriate inside the function.
#
# Other boilerplate related to options, but
# unrelated to the purpose of the function.
#
end
但是,我无法在函数内部设置值并将这些值无缝地传递给调用方。与中一样,
argparse
在外部作用域(调用argparse
的函数)中设置值,但我无法使用自己的自定义argparse
包装器执行相同的操作。至少,如果有一个干净的方法,我不确定怎么做。特别是,argparse
可以在其外部范围内设置局部变量,我希望将该功能保留在假定的argparse
包装器中。这可能吗?我是设计和实现argparse
的人。我推荐的方法是您可以在share/functions/fish_opt.fish模块中找到的方法。在实现该命令的函数中执行argparse
。使用--no scope shadowing
标志定义辅助函数,以使其能够直接访问父函数中的变量。然后在argparse
返回后调用该函数来验证args(或执行任何需要的操作)。Ah,那么用--无范围阴影声明的函数可以操作外部范围中的变量吗?我可能误以为它能读,但不能写。