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,那么用
--无范围阴影声明的函数可以操作外部范围中的变量吗?我可能误以为它能读,但不能写。