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

Valuable changes depends on the existence of argument file

我这样写 fish shell 的配置:

# 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

如果给出一个或多个参数,我预计在任何情况下都会打印第一个参数。但是,如果存在与 $argv[1] 同名的文件,$var 变为 $argv[1]否则变为空字符串

谁能告诉我为什么?

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

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

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

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