bash数组数组

srgblnch

尝试编写一些嵌套循环,但我没有得到如何编写它的信息。也许我看错了方向,但是我想写的是:

declare -a bar=("alpha" "bravo" "charlie")
declare -a foo=("delta" "echo" "foxtrot" "golf")

declare -a subgroups=("bar" "foo")

因此,我想对子组进行迭代(将来会出现更多的barfoo),并在它们内部进行迭代,因为它们可以具有不同数量的元素。

所需的输出如下所示:

group name: bar with group members: alpha bravo charlie
        working on alpha of the bar group
        working on bravo of the bar group
        working on charlie of the bar group
group name: foo with group members: delta echo foxtrot golf
        working on delta of the foo group
        working on echo of the foo group
        working on foxtrot of the foo group
        working on golf of the foo group

我写的关闭代码似乎在barfoo数组中以及在每个集合上的元素扩展后都失败了

for group in "${subgroups[@]}"; do
   lst=${!group}
   echo "group name: ${group} with group members: ${!lst[@]}"
   for element in "${!lst[@]}"; do
       echo -en "\tworking on $element of the $group group\n"
   done
done

输出为:

group name: bar with group members: 0
        working on 0 of the bar group
group name: foo with group members: 0
        working on 0 of the foo group
伊尼安

这是一个很常见的问题bash,要引用需要使用创建名称引用的数组中的数组declare -n后面的名称-n将用作对分配值(之后=的名称引用现在,我们将具有nameref属性的该变量视为扩展为数组,并像以前一样进行完全正确的带引号的数组扩展。

for group in "${subgroups[@]}"; do
    declare -n lst="$group"
    echo "group name: ${group} with group members: ${lst[@]}"
    for element in "${lst[@]}"; do
        echo -en "\tworking on $element of the $group group\n"
    done
done

请注意,bash仅从v4.3开始支持nameref。有关较旧的版本和其他解决方法,请参见分配间接/引用变量

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章