3

这可能是一个简单的答案,但是在谷歌搜索之后,我可能只是把术语记下来了,所以我还没有找到任何关于我要问的东西。

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

我试过这个:

for file in $2; do
    echo $file
done

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

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

ls $2
4

1 回答 1

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[@]}"…
于 2012-07-23T20:48:37.437 回答