zsh-迭代脚本中使用参数匹配的文件
我在zsh shell中正确地执行了以下代码:zsh-迭代脚本中使用参数匹配的文件,zsh,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.h
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
./Aliasing.html
但是,当我使用此代码,但在zsh函数中发送匹配字符串(./a*.html)作为参数时,它将只显示第一个文件
脚本:
displayy() {
for f in $1; do; echo $f; done
}
命令:
%displayy ./A*.html
输出
./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
./Aliasing.html
我更希望打印出与在shell中执行for循环时相同的文件(第一个示例)。知道我做错了什么吗?Graziedisplay./A*.html命令的问题是,
*
在传递给dispayy
函数之前由zsh展开。实际上,您的命令如下所示:
$ displayy ./Aliasing.html ./Alternate-Forms-For-Complex-Commands.html ...
然后在display
中只打印第一个参数:/Aliasing.html
解决此问题的最简单方法是更改display
定义中的一个字符(1
=>@
):
displayy() {
for f in "$@"; do; echo "$f"; done
}
循环的这种迭代方式会遍历所有
display
参数。此外,我建议在变量周围加双引号,这是一个好习惯,即使在本例中,文件名中没有空格。display./a*.html命令的问题是,*
在传递给dispay
函数之前由zsh展开。实际上,您的命令如下所示:
$ displayy ./Aliasing.html ./Alternate-Forms-For-Complex-Commands.html ...
然后在display
中只打印第一个参数:/Aliasing.html
解决此问题的最简单方法是更改display
定义中的一个字符(1
=>@
):
displayy() {
for f in "$@"; do; echo "$f"; done
}
循环的这种迭代方式会遍历所有
display
参数。此外,我建议在变量周围加双引号,这是一个好习惯,即使在本例中,文件名中没有空格。display./a*.html命令的问题是,*
在传递给dispay
函数之前由zsh展开。实际上,您的命令如下所示:
$ displayy ./Aliasing.html ./Alternate-Forms-For-Complex-Commands.html ...
然后在display
中只打印第一个参数:/Aliasing.html
解决此问题的最简单方法是更改display
定义中的一个字符(1
=>@
):
displayy() {
for f in "$@"; do; echo "$f"; done
}
循环的这种迭代方式会遍历所有
display
参数。此外,我建议在变量周围加双引号,这是一个好习惯,即使在本例中,文件名中没有空格。display./a*.html命令的问题是,*
在传递给dispay
函数之前由zsh展开。实际上,您的命令如下所示:
$ displayy ./Aliasing.html ./Alternate-Forms-For-Complex-Commands.html ...
然后在display
中只打印第一个参数:/Aliasing.html
解决此问题的最简单方法是更改display
定义中的一个字符(1
=>@
):
displayy() {
for f in "$@"; do; echo "$f"; done
}
循环的这种迭代方式会遍历所有
display
参数。此外,我建议在变量周围加双引号,这是一个好习惯,即使在本例中,文件名中没有空格。感谢您分享此信息。这很有帮助,现在脚本开始工作了。我很感激。祝您今天愉快,先生。:)请注意,在zsh
中,$@
和“$@”
在默认设置下是相同的。感谢您共享此信息。这很有帮助,现在脚本开始工作了。我很感激。祝您今天愉快,先生。:)请注意,在zsh
中,$@
和“$@”
在默认设置下是相同的。感谢您共享此信息。这很有帮助,现在脚本开始工作了。我很感激。祝您今天愉快,先生。:)请注意,在zsh
中,$@
和“$@”
在默认设置下是相同的。感谢您共享此信息。这很有帮助,现在脚本开始工作了。我很感激。祝您今天愉快,先生。:)请注意,在zsh
中,$@
和“$@”
在默认设置下是相同的。