首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在bash中组合关联数组?

如何在bash中组合关联数组?
EN

Stack Overflow用户
提问于 2015-04-22 17:29:33
回答 5查看 4.6K关注 0票数 12

有没有人知道在bash中组合两个关联数组的优雅方法,就像普通数组一样?我想说的是:

在bash中,可以组合两个普通数组,如下所示:

代码语言:javascript
运行
复制
declare -ar array1=( 5 10 15 )
declare -ar array2=( 20 25 30 )
declare -ar array_both=( ${array1[@]} ${array2[@]} )

for item in ${array_both[@]}; do
    echo "Item: ${item}"
done

我想对两个关联数组执行相同的操作,但是下面的代码不起作用:

代码语言:javascript
运行
复制
declare -Ar array1=( [5]=true [10]=true [15]=true )
declare -Ar array2=( [20]=true [25]=true [30]=true )
declare -Ar array_both=( ${array1[@]} ${array2[@]} )

for key in ${!array_both[@]}; do
    echo "array_both[${key}]=${array_both[${key}]}"
done

它给出了以下错误:

./ associative _arrays.sh:第3行: array_both: true:在分配关联数组时必须使用下标

以下是我想出的一个解决办法:

代码语言:javascript
运行
复制
declare -Ar array1=( [5]=true [10]=true [15]=true )
declare -Ar array2=( [20]=true [25]=true [30]=true )
declare -A array_both=()

for key in ${!array1[@]}; do
    array_both+=( [${key}]=${array1[${key}]} )
done

for key in ${!array2[@]}; do
    array_both+=( [${key}]=${array2[${key}]} )
done

declare -r array_both

for key in ${!array_both[@]}; do
    echo "array_both[${key}]=${array_both[${key}]}"
done

但我希望我实际上缺少了一些语法,这将允许一行赋值,如非工作示例所示。

谢谢!

EN

Stack Overflow用户

发布于 2019-10-24 17:01:59

将数组的“-p声明”的输出连在一起怎么样(没有理由让'n‘方式也不工作,如下所示):

代码语言:javascript
运行
复制
#! /bin/bash

declare -Ar array1=(  [5]=true [10]=true [15]=true )
declare -Ar array2=( [20]=true [25]=true [30]=true )
declare -Ar array3=( [35]=true [40]=true [45]=true )

# one liner:
eval declare -Ar array_both=($(declare -p array1 array2 array3 | sed -z -e $'s/declare[^(]*(//g' -e $'s/)[^ ]//g'))

# proof:
for k in ${!array_both[$*]} ; do
  echo array_both[$k]=${array_both[$k}
done
票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29804909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档