我想制作一个嵌套的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
,则无关紧要。
尝试了多项建议,但无法弄明白......
答案 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
,更好地解释一下你真正想要完成什么,可能有更好的解决方案