Fish Shell通配符函数输出异常:与原生ls命令结果不一致
Fish函数中通配符仅匹配首个文件的解决方法
问题根源在于你的函数只定义了单个参数arg。Fish会在执行命令前自动展开通配符,当你运行ls-wildcard path/*.foo时,path/*.foo会被展开成path/bar1.foo path/bar2.foo两个参数,但函数仅接收第一个参数,剩余参数被直接忽略,导致ls只处理了第一个文件。
解决方法是让函数接收所有传入的参数,有两种实现方式:
方案1:使用默认的$argv变量
Fish的$argv变量默认保存所有位置参数,修改函数如下:
function ls-wildcard ls $argv end
方案2:显式声明可变参数
用...语法声明函数接收任意数量的参数:
function ls-wildcard -a args... ls $args end
修改后再次运行ls-wildcard path/*.foo,通配符展开的所有文件路径都会被传入函数,ls就能正常列出所有匹配的文件了。
内容的提问来源于stack exchange,提问作者fxf
相关产品推荐
相关产品推荐

