zsh - 迭代使用脚本中的参数匹配的文件

时间:2014-10-11 22:44:23

标签: zsh

我在zsh shell中正确执行了这段代码:

for f in ./A*.html; do; echo $f; done

输出

./Aliasing.html
./Alternate-Forms-For-Complex-Commands.html
./Alternative-Completion.html
./Arguments.html
./Arithmetic-Evaluation.html
./Arithmetic-Expansion.html
./Array-Parameters.html
./Author.html
./Availability.html

但是,当我使用此代码,但在zsh函数中发送匹配字符串(./A*.html)作为参数时,它将仅显示第一个文件

脚本:

displayy() {
for f in $1; do; echo $f; done
}

命令:

%displayy ./A*.html

输出

./Aliasing.html

我宁愿期望在shell中执行for循环时打印出相同的文件(第一个例子)。我有什么想法,我做错了什么?格拉齐

1 个答案:

答案 0 :(得分:3)

displayy ./A*.html命令的问题是*在传递给dispayy函数之前由zsh 扩展。所以实际上你的命令看起来像这样:

$ displayy ./Aliasing.html ./Alternate-Forms-For-Complex-Commands.html  ...

然后在displayy中,您只打印第一个参数:./Aliasing.html

解决此问题的最简单方法是在1定义中更改一个字符{@ => displayy}:

displayy() {
for f in "$@"; do; echo "$f"; done
}

这种循环迭代遍历所有display个参数。另外,我建议在变量周围加上双引号作为一个好习惯,即使在这个例子中文件名中没有空格。