It seems that in general the array type is inherited just fine, there is an issue only in the case that: * the `A' attribute is inherited but not explicitly supplied * we are creating the local variable with the `declare' command (i.e. it is not already an existing local variable) * we are performing a compound assignment/append operation in the same declare command
For example, given: shopt -s localvar_inherit declare -A var=([X]=X) These all work smoothly: ## no explicit `-A', no assignment in `declare': f() { declare var; declare -p var; }; f # declare -A var=([X]="X" ) f() { declare var; var=([Y]=Y); declare -p var; }; f # declare -A var=([Y]="Y" ) f() { declare var; var+=([Y]=Y); declare -p var; }; f # declare -A var=([X]="X" [Y]="Y" ) ## explicit `-A', assignment in `declare': f() { declare -A var=([Y]=Y); declare -p var; }; f # declare -A var=([Y]="Y" ) f() { declare -A var+=([Y]=Y); declare -p var; }; f # declare -A var=([X]="X" [Y]="Y" ) ## non-compound assignment: f() { declare var[Y]=Y; declare -p var; }; f declare -A var=([X]="X" [Y]="Y" ) But here we have some issues: ## no explicit `-A', assignment in `declare': f() { declare var=([Y]=Y); declare -p var; }; f # Segmentation fault: 11 f() { declare var+=([Y]=Y); declare -p var; }; f # Segmentation fault: 11 f() { declare var+=(); declare -p var; }; f # declare -aA var=() f() { declare var=(); declare -p var; }; f declare -aA var=()