2013-06-26 98 views
0

我已經花了幾個小時了,現在似乎找不到解決方案。使用變量訪問bash關聯數組

我已在碼連續3個關聯數組:

模板1 模板2 template3

這可能真的是數組的n個和計數器變量也設置在代碼,以便:

template_name="template$counter" 

會給下一個模板創建。所以我的問題是,當我要循環關聯數組數爲n,我需要做的是這樣的:

for ((i = 1; i < $counter; i++)); do 
    template_name="template$i" 
    for i in ${!template_name[@]}; do 
     echo "$i - ${template_name[$i]}" 
    done 
done 

但它不工作 - 我得到不好的替代錯誤。看起來我可以使用變量名來動態訪問關聯數組。有沒有其他的方式來看待這個問題?

+0

你應該:(1)重新考慮你的設計或(2)改變語言。在[tag:bash]中做這些事情並不是真正的建議。 –

回答

1

後我發現一些更挖掘了答案:

eval echo "APP_NAME $template_name: "\${${template_name}[APP_NAME]} 
+0

'eval' is evil':-('。 –

+0

我知道 - 但我在工作時被困在這裏,無法找到另一種方法來實現我需要的結果。 – ilium007

0

我不太確定這是否是要你預期,但我認爲它可以幫助你找到比使用eval更好的解決方案。

#!/bin/bash 
template0=("123" "456") 
template1=("zxc" "edc") 

counter=2 
for ((i = 0; i != $counter; ++i)); do 
    template_name="template$i[@]" 
    echo ${!template_name} 
    for j in ${!template_name}; do 
     echo "$j - template$i" 
    done 
done 

產地:

==> 123 456 
==> 123 - template0 
==> 456 - template0 
==> zxc edc 
==> zxc - template1 
==> edc - template1