有没有人知道在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