Bash
如何將 2 個數組組合成一個關聯數組
我需要將
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 行做錯了。我應該怎麼做才能解決這個問題?
周圍不能有空格
=
。使用
hash[${array1[i]}]=${array2[i]}
IMO 會更清晰。
作為記錄,在 中
zsh
,要將兩個數組轉換為關聯數組/雜湊,您可以:typeset -A hash hash=("${(@)array1:^array2}")
數組壓縮運算符在哪裡
${array1:^array2}
,參數擴展標誌用於保留空元素(在雙引號中,類似於)。(順便說一下,bash 雜湊不支持空鍵)。@``"$@"