Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在循环内的bash中创建动态命名的关联数组_Bash_Associative Array - Fatal编程技术网

在循环内的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

是否可以在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_${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