这可能是一个简单的答案,但在谷歌搜索后我可能只是将术语缩小,所以我还没有找到任何关于我要问的内容。
当接受诸如/bin/*.txt之类的参数时,如何遍历每个文件?
我试过这个:
for file in $2; do
echo $file
done
第二个参数($ 2)有一个输入,如/bin/*.txt,但echo只打印出6个文本文件中的1个。我是否错误地重复了这个?
我也尝试过使用ls,它也不能正确打印出来......
ls $2
答案 0 :(得分:7)
除非引用参数,否则参数/bin/*.txt
将在脚本看到它之前展开 。因此,如果参数仍为/bin/*.txt
,则可以确定没有与该glob匹配的文件。否则,您将有多个匹配所有匹配文件的参数,您只需使用参数:
for file; do # equivalent to for file in "$@"
echo "$file"
done
如果你想引用参数,你必须自己扩展它。数组是一种很好的方法:
arg='/bin/*.txt'
files=( $arg )
for file in "${files[@]}"…