Bash:迭代参数文件

时间:2012-07-23 20:46:12

标签: bash argument-passing

这可能是一个简单的答案,但在谷歌搜索后我可能只是将术语缩小,所以我还没有找到任何关于我要问的内容。

当接受诸如/bin/*.txt之类的参数时,如何遍历每个文件?

我试过这个:

for file in $2; do
    echo $file
done

第二个参数($ 2)有一个输入,如/bin/*.txt,但echo只打印出6个文本文件中的1个。我是否错误地重复了这个?

我也尝试过使用ls,它也不能正确打印出来......

ls $2

1 个答案:

答案 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[@]}"…