Assignment to a subscripted array variable behaves differently for nameref vs `printf -v`, as shown below.
Assignment via nameref variable: declare -a arr=() func() { local -n ref=$1 ref='nameref' } func 'arr[0]' declare -p 'arr[0]' arr --- output --- declare -- arr[0]="nameref" declare -a arr='()' v.s. Assignment via `printf -v`: declare -a arr=() func() { printf -v "$1" 'printf -v' } func 'arr[0]' declare -p 'arr[0]' arr --- output --- ap.sh: line 10: declare: arr[0]: not found declare -a arr='([0]="printf -v")' Is subscripted array variable allowed as argument to `declare -p` in bash? A quick test seems to suggest it's not -- consistent with the `printf -v` behavior. Is there a legitimate explanation for this?