我写了这样的鱼壳配置:
# One or more argument(s) will be given
function run
set -l src $argv[1]
set -l var
switch "$src"
case *
set var "$src"
end
echo $var
end
如果给出一个或多个参数,我预计在任何情况下都会打印第一个参数。但是,如果存在与$var
同名的文件,则$argv[1]
会变为$argv[1]
,否则会变为空字符串。
有人可以告诉我为什么吗?
答案 0 :(得分:4)
*
中的case *
被解释为glob。如果你不想要它,请引用它。
答案 1 :(得分:3)
Faho已经回答了你的问题,但我想指出你的方法比必要的更复杂。如果您只想打印第一个参数,如果提供了一个或多个参数,请执行以下操作:
set -q argv[1]
and echo $argv[1]
第一个语句检查argv
是否至少有一个值。如果前一个语句返回成功(即$status
设置为零),则第二个回应它。