2012-07-23 124 views
3

这可能是一个简单的答案,但在Google搜索后,我可能只是停下了术语,所以我还没有找到任何关于我所问的内容。Bash:遍历参数文件

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

我曾尝试这样的:

for file in $2; do 
    echo $file 
done 

第二个参数($ 2)具有输入诸如/bin/*.txt但回波仅打印出的文本文件的1从6 I的有。我是否错误地重复了这个?

我也使用LS这样尝试过,它不会打印出正确要么...

ls $2 

回答

7

除非参数报价,参数/bin/*.txt将扩大脚本曾经看到它前。因此,如果参数仍然是/bin/*.txt,则可以确定没有与该glob匹配的文件。否则,你就会有多个参数匹配所有那些匹配的文件,你可以使用参数:

for file; do # equivalent to for file in "[email protected]" 
    echo "$file" 
done 

如果要被引用的说法,你就必须自己展开。数组是这样做一个体面的方式:

arg='/bin/*.txt' 
files=($arg) 
for file in "${files[@]}"… 
+0

所以,如果我想做一个特定的函数调用,第二个参数是中你会如何建议通过遍历文件列表传递?从第二个参数开始的参数迭代器? – user1470511 2012-07-23 20:50:40

+0

好的,所以我只是用你的代码进行了一次转换,它似乎工作正常。我感谢帮助! – user1470511 2012-07-23 20:52:27

+0

@ user1470511假设你的意思是第二个到最后一个参数是文件列表,你可以在将第一个参数分配给一个名称后使用'shift':'first_arg =“$ 1”;移位;'。在此之后,'“$ @”'将包含您的参数列表。 – kojiro 2012-07-23 20:53:02