합계를 연관 배열로 ARRAY1
결합 해야 합니다 . 예를 들어 다음 코드를 사용합니다. ARRAY2
ARRAY
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 해싱은 널 키를 지원하지 않습니다).