Fish shell通配符返回不同的输出



我试图创建一个包含通配符*的命名参数的鱼函数。但是我所做的函数和普通命令之间的输出是不同的。

下面是我的函数:
function ls-wildcard -a arg
ls $arg
end

下面是我尝试执行它的结果

$ ls-wildcard path/*.foo
bar1.foo

输出只显示1个文件,而应该有2个文件。但是普通的ls就像魅力一样。

$ ls path/*.foo
bar1.foo   bar2.foo

我错过了什么吗?

编辑:
在我尝试了一些不同的表达式后,函数的行为似乎在第一次匹配后终止。有办法解决吗?

通配符在函数运行之前展开

你的函数使用一个命名参数,它是一个参数。

所以它等于这个:

function ls-wildcard
ls $argv[1]
end
ls-wildcard path/*.foo
# runs `ls-wildcard` like
ls-wildcard path/bar1.foo path/bar2.foo

,然后你的函数扔掉第二个参数。

最简单的修复方法是使用$argv:

function ls-wildcard
ls $argv
end

将所有参数转发给ls

最新更新