2014-03-13 76 views
0

我在下面發佈的代碼之外定義了一個數組fanrp0 [1]和fanrp0 [2],我對粉絲0到3也做了同樣的處理。我試圖使fstat發生變化,以兩個陣列迴應每個粉絲。從bash中的連接變量中定義一個數組

for ((f=1; f<=2; f++)) 
    do 
     for ((f2=0; f2<=3; f2++)) 
     do 
      fstat="${(fanrp$f2)[$f]}" 
      echo $fstat 
     done 
    done 
+0

這是什麼問題? – anubhava

+0

它看起來像你試圖做什麼bash指作爲間接引用,這顯然是相當困難和繁瑣的做與數組變量,由[這個Bash常見問題頁](http://mywiki.wooledge.org/BashFAQ/006),我在[這個問題]上找到了它(http://stackoverflow.com/questions/11180714/how-to-iterate-over-an-array-using-indirect-reference)。你可以更容易地完成你所需要的'eval' *,比如'eval「fstat = \ $ {fanrp $ f2 [$ f]}」',但是請記住,使用' eval'。我首先閱讀我鏈接到的Bash FAQ頁面。 –

+1

一旦您開始將''[']'作爲索引語法,而不是作爲變量名稱的一部分,則間接數組引用更容易。如果你有一個數組'foo',那麼'foo [0]','foo [1]'等等都是奇怪的變量,每個變量都有自己的值。那麼'x = foo [0]'自然地導致'$ {!x}'相當於$ {foo [0]}'。 – chepner

回答

3

如果fanrp0fanrp1fanrp2fanrp3都是數組,你可以寫你的循環爲

for ((f=1; f<=2; f++)) 
do 
    for ((f2=0; f2<=3; f2++)) 
    do 
    x="fanrp$f2[$f]" 
    fstat="${!x}" 
    echo $fstat 
    done 
done 

由於f2僅用於生成數組名,一個稍微清晰的語法會

for f in {1..2}; do 
    for arr in fanrp{0..3}; do 
    x="$arr[$f]" 
    fstat=${!x} 
    echo $fstat 
    done 
done 
+0

第一個選項實際上給了我一個糟糕的替代錯誤,這是我爲我的第一次嘗試而寫的,我無法弄清楚爲什麼我得到這個錯誤。不過,我認爲你的第二個解決方案對我來說更有意義,謝謝它運作良好,我不知道這是否適合arr – Cfoote7

相關問題