有价值的变化取决于参数文件的存在

时间:2017-08-01 09:20:46

标签: fish

我写了这样的鱼壳配置:

# 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]否则会变为空字符串

有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:4)

*中的case *被解释为glob。如果你不想要它,请引用它。

答案 1 :(得分:3)

Faho已经回答了你的问题,但我想指出你的方法比必要的更复杂。如果您只想打印第一个参数,如果提供了一个或多个参数,请执行以下操作:

set -q argv[1]
and echo $argv[1]

第一个语句检查argv是否至少有一个值。如果前一个语句返回成功(即$status设置为零),则第二个回应它。