在循环内的bash中创建动态命名的关联数组
是否可以在bash中创建关联数组的循环?在循环内的bash中创建动态命名的关联数组,bash,associative-array,Bash,Associative Array,是否可以在bash中创建关联数组的循环? 我想要一些类似的东西 number_of_servers=10; COUNTER=1 while [ $COUNTER -le ${number_of_servers} ]; do declare -A "server_${COUNTER}" COUNTER=$((COUNTER+1)) done 非常感谢 您的代码已经可以工作了: $ for index in 1 2 > do > declare -A "server
我想要一些类似的东西
number_of_servers=10;
COUNTER=1
while [ $COUNTER -le ${number_of_servers} ]; do
declare -A "server_${COUNTER}"
COUNTER=$((COUNTER+1))
done
非常感谢 您的代码已经可以工作了:
$ 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
您可以将其简化为:
或者它:
您的代码已经运行:
$ 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
您可以将其简化为:
或者它:
你试过了吗?这正是你想要的。(虽然您可以通过
声明(一个服务器{1..10}
)更简单地做到这一点)谢谢-这非常有帮助-在我在一个文件中声明100个数组并获取它之前!!但是,是否有一种方法可以动态输入\u服务器数变量。我试图声明-A服务器{1…${number_of_servers}},但失败了。大括号表示法不允许变量。如果你想要一个可变范围,你可以重新使用循环。你可以通过eval
解决这个问题,但就我个人而言,我试图避开eval
@MikeHolt(和JRD);您可以不使用eval
。例如,declare-A$(printf'server\%d'$(seq 1$number\\个服务器))
。(注意printf格式中的空格。)但如果要使用循环,请使用for循环:for((i=1;i@rici哈哈,你把我逼到了极点。我只是在我的机器上测试这个精确的解决方案,以验证它是否有效。我必须查看如何验证数组是否已成功声明。检查变量是否已设置的常用语法不起作用,因为bash在第一次赋值之前技术上不会创建数组,因此declare-A foo
只是给名称foo
分配了一个属性。但是我找到了declare-p
来检查是否声明了某些内容。你试过了吗?它完全符合你的要求。(尽管你可以用declare-A server_{1..10}
来做这件事更简单。)谢谢-这很有帮助-在我在一个文件中声明100个数组并进行寻源之前!!但是,有没有一种方法可以动态输入\u服务器数变量。我尝试声明-a服务器\u{1…${number\u of \u服务器数}但是它失败了。大括号表示法不允许变量。如果你想要一个变量范围,你可以重新使用循环。你可以通过eval
来解决这个问题,但我个人尝试避开eval
@MikeHolt(和JRD);你可以不使用eval
。例如,声明-a$(printf'server\ud'$(seq 1$number of_server))
(注意printf格式中的空格)。但是如果要使用循环,请使用for循环:for((i=1;i@rici哈哈,你把我逼到了极点。我只是在我的机器上测试这个精确的解决方案,以验证它是否有效。我必须查看如何验证数组是否已成功声明。检查变量是否已设置的常用语法不起作用,因为bash在第一次赋值之前技术上不会创建数组,因此declare-A foo
只为名称foo
分配了一个属性。但是我找到了declare-p
来检查是否声明了某些内容。
$ number_of_servers=10
$ declare -A $(printf 'server_%d ' $(seq "$number_of_servers"))
$ declare -p server_10
declare -A server_10