2017-07-14 77 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