我在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循环时打印出相同的文件(第一个例子)。我有什么想法,我做错了什么?格拉齐
答案 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
个参数。另外,我建议在变量周围加上双引号作为一个好习惯,即使在这个例子中文件名中没有空格。