2012-07-23 139 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