Arrays 向以变量命名的关联数组添加值

Arrays 向以变量命名的关联数组添加值,arrays,linux,bash,associative,Arrays,Linux,Bash,Associative,我需要你帮我写一个bash>=4脚本 我正在从远程主机检索一些文件以进行备份。 我有一个for循环,循环遍历主机,为每个主机测试连接,并启动一个检索各种文件的函数 我的问题是,我需要知道出了什么问题(以及是否出了问题),所以我尝试在数组中存储OK或KO值,并在以后解析它 代码如下: ... for remote_host in $hosts ; do short_host=$(echo "$remote_host" | grep -o '^[^.]\+') declare -A

我需要你帮我写一个
bash>=4
脚本

我正在从远程主机检索一些文件以进行备份。 我有一个for循环,循环遍历主机,为每个主机测试连接,并启动一个检索各种文件的函数

我的问题是,我需要知道出了什么问题(以及是否出了问题),所以我尝试在数组中存储OK或KO值,并在以后解析它

代码如下:

...
for remote_host in $hosts ; do
    short_host=$(echo "$remote_host" | grep -o '^[^.]\+')
    declare -A cluster
    printf "INFO: Testing connectivity to %s...   " "$remote_host"
    if ssh -q "$remote_host" exit ; then
        printf "OK!\n"
        cluster[$short_host]="Reacheable"
        mkdir "$short_host"
        echo "INFO: Collecting files ..." 
        declare -A ${short_host}
        objects1="/etc/krb5.conf /etc/passwd /etc/group /etc/fstab /etc/sudoers /etc/shadow"
        for obj in ${objects1} ; do
            if file_retrieve "$user" "$remote_host" "$obj" ; then
->              ${short_host}=["$obj"]=OK
            else
                ${short_host}=["$obj"]=KO

            fi
        done
...
因此,我使用一个名为
cluster
的数组列出节点是否可访问,另一个数组(以节点的短名称命名)列出单个文件的OK或KO。 在执行时,我得到了以下错误(第130行是我用上面的箭头标记的行):

/test.sh:line 130:ubuntu01=[/etc/krb5.conf]=OK:未找到命令

我认为这肯定是一个synthax错误,但我无法修复它。我尝试了很多组合,但都没有成功


感谢您的帮助。

由于数组名称包含在变量
短列表中,您需要
eval
才能使分配生效:

${short_host}=["$obj"]=OK
将其更改为:

eval ${short_host}=["$obj"]=OK
eval ${short_host}=["$obj"]=OK

类似职位:


谢谢,但是实际上
short\u host
不是数组的名称。数组的名称是节点的短名称,因为我在for循环中,所以在迭代时会发生变化。这就是为什么我使用$符号将其称为变量。如果我不这样做,它将创建一个名为
short\u host
的数组,不是吗?我误解了吗?谢谢,这救了我一天!我不得不说,我已经猜到了eval,但我在stackoverflow上看到eval是邪恶的(字面意思),所以我不确定!。再次感谢<如果控制传递给它的字符串,则code>eval
并不是真正的邪恶。