2017-07-14 69 views
1

是否有可能創建一個循環,使bash中的關聯數組?
我想沿着這些線路的東西....在循環內的bash中創建動態命名的關聯數組

number_of_servers=10; 
COUNTER=1 

while [ $COUNTER -le ${number_of_servers} ]; do 
    declare -A "server_${COUNTER}" 
    COUNTER=$((COUNTER+1)) 
done 

非常感謝!

+1

你沒嘗試嗎?它確實是你想要的。 (雖然你可以用'declare -A server_ {1..10}') – rici

+0

來做到這一點,謝謝 - 這對我有很大的幫助 - 在我聲明一個文件中包含100個數組之前!但是,有沒有辦法動態輸入number_of_servers變量。我試過declare -A server_ {1 ... $ {number_of_servers}}但失敗了。 – JRD

+0

大括號表示法不允許使用變量。如果你想要一個可變範圍,你可以回到使用循環。你可以用'eval'解決這個問題,但是我個人嘗試避開'eval'。 –

回答

0

您的代碼已經工作:

$ for index in 1 2 
> do 
>  declare -A "server_${index}" 
> done 
$ declare -p server_1 
declare -A server_1 
$ declare -p server_2 
declare -A server_2 

您可以簡化它像@rici pointed out

$ declare -A server_{3..4} 
$ declare -p server_4 
declare -A server_4 

或者dynamically declare它:

$ number_of_servers=10 
$ declare -A $(printf 'server_%d ' $(seq "$number_of_servers")) 
$ declare -p server_10 
declare -A server_10