2013-04-26 72 views
1

我有興趣更新for循環中的數組元素值,但由於輸出包含[counter],所以我的更新定義錯誤。 這裏是我的代碼:更新For循環Bash中的數組值

declare -a mem_set=(0 0 0 0 0 0 0) 
counter=0 
for i in "${domain_path[@]}" 
do 
    cd $i 
    echo "$(pwd)" 
    for mLine in $(grep 'default.default.minmaxmemory.main' start_params.properties) 
    do 
      echo "$mLine" 
    done 
    l_bound="Xmx" 
    r_bound="m" 
    mem_set[counter]=$(echo "$mLine" | sed -e "s/.*${l_bound}//;s/${r_bound}.*//") 
    echo "$mem_set[counter]" 
    let counter=counter+1 
done 

環路和$(echo "$mLine" | sed -e "s/.*${l_bound}//;s/${r_bound}.*//")運行很好,但我不能設法得到正確的輸出。我的更新聲明缺失了什麼?它的輸出是2048[counter]。此外,除了使用i之外的另一個計數器counter,也可以使用i代替mem_set數組(兩個數組的大小相同)?

謝謝

+4

你可以改變'echo「$ mem_set [counter]」'echo'$ {mem_set [counter]}「'看看是否打印出正確的值? – iruvar 2013-04-26 19:54:36

+1

您的內循環與'grep'def ... main'start_params.properties'完全相同。 – chepner 2013-04-26 20:02:22

+1

@ravoori感謝您的建議。改變格式的工作,所以現在我得到正確的輸出。 – 2013-04-26 21:41:26

回答

-1

在bash中,您將使用$訪問變量。

嘗試,

counter=`expr $counter + 1` 

counter=$((counter + 1)) 
+0

不是真的'bash' – iruvar 2013-04-26 19:53:17

+0

沒錯。我編輯了它來糾正它。 – Shobit 2013-04-26 20:00:58

+0

@Shobit我的櫃檯工作正常。 – 2013-04-26 21:42:33

0

由於功能要求mark a comment as an answer繼續下降,我在這裏複製上面的解決方案。

你可以改變回聲「$ mem_set [counter]」來回顯「$ {mem_set [counter]}」,看看是否打印出正確的值? - 1_CR

感謝您的建議。改變格式的工作,所以現在我得到正確的輸出。 - Simply_Me