2013-03-05 57 views
0

波紋管行代碼不工作,它不遍歷目錄。在unix中需要幫助以迭代for循環

input={20132802,20132802} 
for i in $(ls -1 /home/$input/*s.log) 
do 
... 
done 

但是當在循環中提供輸入工作正常。

for i in $(ls -1 /home/{20132802,20132802}/*s.log) 
do 
... 
done 

請大家幫忙。

回答

-1

嘗試編寫$ {input}而不是$ input,因爲我是for循環的索引,並且我猜$ $用於編寫$ input('$ i'nput)時。

+0

它不是working.the ls命令不通過目錄遍歷。 – 2013-03-05 11:06:33

0

Brace擴展不能用於變量,因爲它在任何其他擴展之前執行。 從man bash

括號擴展被任何其他擴展之前執行,並且特別的其他擴展任何 字符在結果保留。它 是嚴格的文本。 Bash不會將任何語法解釋 應用於擴展的上下文或大括號之間的文本。爲了避免與參數擴展衝突,字符串'$ {'不是 被認爲有資格進行大括號擴展。

但是,您可以使用eval來克服這個限制:

input={20132802,20132802} 
for i in $(eval ls -1 /home/$input/*s.log) 
do 
... 
done 

強制性閱讀:eval is evil

+0

謝謝......它工作:) – 2013-03-05 12:58:56