Fish 函数能否获取空参数?

Fish 函数能否获取空参数?,fish,Fish,我的代码 执行和结果 function foo argparse -n foo 'u/user=' 'g/group=' 's/shell=' -- $argv bar $_flag_u $_flag_g $_flag_s end function bar -a user group shell echo $user echo $group echo $shell end foo $argv 我想要的期望 > fish test.fish -

我的代码

执行和结果

function foo
    argparse -n foo 'u/user=' 'g/group=' 's/shell=' -- $argv

    bar $_flag_u $_flag_g $_flag_s
end

function bar -a user group shell
    echo $user
    echo $group
    echo $shell
end

foo $argv
我想要的期望

> fish test.fish -u user_name -g group_name -s shell_name
user_name
group_name
shell_name
> fish test.fish -g group_name -s shell_name
group_name
shell_name

> fish test.fish -u user_name -s shell_name
user_name
shell_name

>
我能得到期望值吗?
如果不使用-u选项,我的期望是条形函数中的$user为空。
(这意味着“echo$status”的结果在“set-q user”之后是1。)

如果我别无选择,我会大喊大叫:
(参考资料:)

你的问题是:

function foo
    argparse -n foo 'u/user=' 'g/group=' 's/shell=' -- $argv

    set -q _flag_u; or set _flag_u ''
    set -q _flag_g; or set _flag_g ''
    set -q _flag_s; or set _flag_s ''

    bar $_flag_u $_flag_g $_flag_s
end

function bar -a user group shell

    if test -n $user
        # do something
    end
    if test -n $group
        # do something
    end
    if test -n $shell
        # do something
    end
end

foo $argv
这意味着bar调用其第一个参数“user”,第二个参数“group”,第三个参数“shell”

当你跑的时候

function bar -a user group shell
fish扩展变量。如果设置了它们,它们将扩展到与元素数量相同的参数(在fish中,所有变量都是列表!)

因此,您将把$u放入$user,把$g放入$group,把$s放入$shell

但是,如果没有设置一个变量(因为调用
foo
时没有给出该选项),那么该变量将扩展为零,因此如果没有给出例如
--group
,则其工作原理如下

bar $u $g $s
这将把$u的内容分配给$user,$s的内容分配给$group,因为这是bar看到的第二个参数

要禁止此操作,请使用
set-q
或双引号将变量括起来:

bar $u $s

谢谢你的评论!我了解鱼的机理。而且,你的建议,使用“双引号”看起来很适合我的情况。再次感谢。
bar $u $s
    bar "$_flag_u" "$_flag_g" "$_flag_s"