加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:18:00 所属栏目:安全 来源:网络整理
导读:有没有人知道在bash中组合两个关联数组的优雅方法就像普通数组一样?这就是我在说的: 在bash中,您可以组合两个常规数组,如下所示: declare -ar array1=( 5 10 15 )declare -ar array2=( 20 25 30 )declare -ar array_both=( ${array1[@]} ${array2[@]} )fo
有没有人知道在bash中组合两个关联数组的优雅方法就像普通数组一样?这就是我在说的:

在bash中,您可以组合两个常规数组,如下所示:

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

我想用两个关联数组做同样的事情,但是下面的代码不起作用:

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: line 3: array_both: true: must use subscript when assigning associative array

以下是我提出的解决方法:

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

但是我希望我实际上缺少一些允许单行分配的语法,如非工作示例所示.

谢谢!

我也没有单行,但这里有一个不同的“解决方法”,有人可能会喜欢使用字符串转换.这是4行,所以我只有3个来自你想要答案的分号!
declare -Ar array1=( [5]=true [10]=true [15]=true )
declare -Ar array2=( [20]=true [25]=true [30]=true )

# convert associative arrays to string
a1="$(declare -p array1)"
a2="$(declare -p array2)"

#combine the two strings trimming where necessary 
array_both_string="${a1:0:${#a1}-3} ${a2:21}"

# create new associative array from string
eval "declare -A array_both="${array_both_string#*=}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读