将值添加到以变量命名的关联数组

时间:2017-02-05 18:19:20

标签: arrays linux bash associative

我需要您使用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: command not found

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

由于数组名称包含在变量short_list中,因此您需要eval才能使分配工作:

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

将其更改为:

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

类似帖子:

Single line while loop updating array