Shell通过第一个值引用第二个数组

时间:2014-12-15 00:13:40

标签: arrays shell for-loop

我想制作一个嵌套的for循环。 (如果重要的话,在CentOS 6.6上)

首先,我必须得到一份服务清单。在这个例子中是3。 每项服务都可以包含我想要获得的更多详细信息。

#!/bin/sh

services=(apache ftp ssh)
apache=(detail1 detail2 detail3)
ftp=(detail2 detail3)
ssh=(detail1 detail3 detail5)

for first in ${services[@]}; do
    whatever $first
    for second in ${first[@]}; do
        whatever $second
    done

done 

但不知怎的,我无法使用$first[@],但我可以使用$apache[@]。 如果我在没有第一个数组的情况下手动使用数组的值或定义$first,则无关紧要。

尝试了多项建议,但无法弄明白......

1 个答案:

答案 0 :(得分:1)

如果我理解得很好,你似乎是间接获取数组值,所以工作代码是:

#!/bin/bash

services=(apache ftp ssh)
apache=(detail1 detail2 detail3)
ftp=(detail2 detail3)
ssh=(detail1 detail3 detail5)

for first in ${services[@]}; do
    echo "whatever $first"
    for second in $(eval echo \${$first[@]}); do
        echo "whatever $second"
    done
done

但是应该避免使用eval,更好地解释一下你真正想要完成什么,可能有更好的解决方案