2013-10-29 112 views
1

我有一個問題,我的bash腳本變量空的內部循環後

t='Hostname\cfg;' 

echo "Header" > $DST 

for i in * 
do 
     t="$i;" 
     egrep -v "(^$|^#)" $IPLIST | while read ii 
     do 
       if grep -q "$ii" $i 
       then 
         t=$t"y;" 
       else 
         t=$t"n;" 
       fi 
echo "$t" 
     done 

echo "x$t" 

     n=$(($n + 1)) 
     echo "$n" 

     #echo "$ii;$t" # >> $DST 
     #t="" 
done 

產生以下輸出:

h0010001.conf;y; 
h0010001.conf;y;y; 
<ommited> 
h0010001.conf;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;y;n;n;y;y;y;y;y;y;y;y;y;y;y;y;n;y;y;y;y;y;y;n;y;y;y;y;y;y;y;y;y;n;n; 
xh0010001.conf; 

所以,出於某些原因,變量t是空的內循環完成後, 。 我想要實現的是,在第二個循環之後寫入t到文件中。

+1

命令在管道在子shell執行,所以變量賦值不會影響原來的殼。 – Barmar

回答

1

@Barmar是現貨。這是一個典型的解決方法。

更改while循環父shell中運行:

while read ii 
    do 
      if grep -q "$ii" $i 
      then 
        t=$t"y;" 
      else 
        t=$t"n;" 
      fi 
      echo "$t" 
    done < <(egrep -v "(^$|^#)" $IPLIST) 
+0

雖然外部'egrep'完全沒用。 –

+0

@gniourf_gniourf對這個問題不重要,但是,有很多事情我會寫在這裏不一樣 – sehe

+0

事實上,它有某種相關性,因爲如果OP沒有使用這個'egrep'並且直接使用globs進行過濾,問題將永遠不會發生! –