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