Ben*_*ber 9 bash associative-array
有没有人知道一种优雅的方式来组合两个关联数组,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
Run Code Online (Sandbox Code Playgroud)
我想用两个关联数组做同样的事情,但是下面的代码不起作用:
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
Run Code Online (Sandbox Code Playgroud)
它给出以下错误:
./associative_arrays.sh:line 3:array_both:true:分配关联数组时必须使用下标
以下是我提出的解决方法:
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
Run Code Online (Sandbox Code Playgroud)
但是我希望我实际上缺少一些允许单行分配的语法,如非工作示例所示.
谢谢!
小智 2
我也没有单行代码,但这里有一种不同的“解决方法”,有人可能喜欢使用字符串转换。它有 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
Run Code Online (Sandbox Code Playgroud)