Я попытался объявить ассоциативный массив через функцию, и я обнаружил, что ассоциативный массив становится простым массивом. Тестовый код выглядит следующим образом:
bash-5.0$ cat test.sh
#!/bin/bash
createArr(){ declare -A "$1"; }
# create array using `createArr'
name=array1
createArr $name
array1[1]=1
echo "${!array1[@]}"
array1[a]=1
echo "${!array1[@]}"
declare -p array1
# create array directly
name=array2
declare -A $name
array2[1]=1
echo "${!array2[@]}"
array2[a]=1
echo "${!array2[@]}"
declare -p array2
И выполнение кода дает следующий результат:
bash-5.0$ ./test.sh
1
0 1
declare -a array1=([0]="1" [1]="1")
1
1 a
declare -A array2=([1]="1" [a]="1" )
Я хотел бы знать, почему результаты отличаются, спасибо! (Моя bash версия 5.0.11)