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"