f() { local -a v local -a w g echo "f: ${v[@]}, ${w[@]}" } g() { aux=v declare -ga "$aux=( asdf fdsa )" declare -ga w=( asdf fdsa ) echo "g: ${v[@]}, ${w[@]}" } f echo "FIN: ${v[@]}, ${w[@]}" unset v w unset -f f g f() { local v local w g echo f: v = $v, w = $w } g() { aux=v declare -g w=one declare -g "$aux=two" echo g: v = $v, w = $w } f echo FIN: v = $v, w = $w # problem with error return propagation through bash-4.3 unset -f aaa bbb unset unique aaa() { declare -g -a unique=() } bbb() { declare -g -A unique=() } aaa bbb echo after bbb: $?