2개의 배열을 연관 배열로 결합하는 방법

2개의 배열을 연관 배열로 결합하는 방법

합계를 연관 배열로 ARRAY1결합 해야 합니다 . 예를 들어 다음 코드를 사용합니다. ARRAY2ARRAY

 mapfile -t ARRAY1 < <(/bin/awk '{ print $ 1 }' /output/gen_branch)
 mapfile -t ARRAY2 < <(/bin/awk '{ print $ 6 }' /output/gen_code )
 declare -A ARRAY

 for ((i=0; $i<${#ARRAY1[@]}; i++))
 do
 ARRAY+=( ["${ARRAY1[i]}"] = "${ARRAY2[i]}" )
 done

 ##added this loop to check output
 for value in "${!ARRAY[@]}"
 do
 echo "branch: $value"
 echo "code: ${ARRAY[$value]}"
 done 

나는 bash의 다른 부분에서 사용할 수 있기를 바랍니다.첫 번째의 요소는 ARRAY1다음과 같습니다.첫 번째요소 ARRAY2등):

ARRAY1=( b1 b2 b3 )
ARRAY2=( c1 c2 c3 )
ARRAY= ( [b1]=c1 [b2]=c2 [b3]=c3 ) 

하지만 코드를 실행하면 다음 오류가 발생합니다.

line 7: ARRAY: [b1]: must use subscript when assigning associative array
line 7: ARRAY: =: must use subscript when assigning associative array
line 7: ARRAY: c1: must use subscript when assigning associative array
(and it goes on like this for every entry)  

7번째 줄에서 뭔가 잘못하고 있는 것 같아요. 이 문제를 해결하려면 어떻게 해야 합니까?

답변1

주위에는 공백이 있어서는 안 됩니다 =.

사용

hash[${array1[i]}]=${array2[i]}

IMO가 더 명확 할 것입니다.

레코드의 경우 zsh두 배열을 연관 배열/해시로 변환하려면 다음을 수행해야 합니다.

typeset -A hash
hash=("${(@)array1:^array2}")

어디에${array1:^array2}배열 압축연산자 및 @매개변수 확장 플래그는 빈 요소를 유지하는 데 사용됩니다(예: 큰따옴표로 묶음 "$@"). (BTW, bash 해싱은 널 키를 지원하지 않습니다).

관련 정보