2012-11-07 43 views
1

我想使用列表作爲for循環的參數;但雙引號,該列表不被理解爲列表,並且沒有引號,通配符被評估爲文件名。在Bash循環中避免通配符擴展

A="a* b*" 

for ex in "$A"; do 
    echo "$ex"; 
done 

for ex in $A; do 
    echo "$ex"; 
done 

第一個打印:

a* b* 

後者打印:

a.txt 
b.txt 

我想:

a* 
b* 

我怎樣才能使這項工作?

+0

errr ...我想我變成盲人......就是兩個循環之間的區別? – thkala

+0

thkala,同意。據推測,他們中的一個不應該擁有帶有dbl引號的$ A。祝你們好運。 – shellter

回答

4

您可以set -f禁用路徑擴展:

A="a* b*" 

(set -f 
    for ex in $A ; do 
     echo "$ex" 
    done 
) 
4

使用數組:

A=("a*" "b*") 
for ex in "${A[@]}"; do 
    echo "$ex" 
done 
+0

錯字:'for x'應該是'ex' –