A few more problematic test cases in this vein (tested against latest
devel snapshot 20180803).

f() { local -n ref=var; local -A ref=([1]=); ref=([2]=); declare -p ref var; }

unset ref var; f
# declare -An ref=()
# declare -A var=([1]="" )
declare -p ref
# declare -a ref=([2]="")

unset ref; var=0; f
# declare -An ref=([1]="" )
# declare -- var="0"
declare -p ref
# declare -a ref=([2]="")


f() { local -n ref=var; local -a ref=([1]=); ref=([2]=); declare -p ref var; }

unset ref var; f
# declare -an ref=()
# declare -a var=([1]="")
declare -p ref
# declare -a ref=([2]="")

unset ref; var=0; f
# declare -an ref=([1]="")
# declare -- var="0"
declare -p ref
# declare -a ref=([2]="")


# same issues for `local -[iluctrx] ref=...'
f() { local -n ref=var; local -i ref=([1]=); declare -p ref var; }

unset var; f
# declare -in ref="var"
# declare -ai var=([1]="0")

var=0; f
# declare -in ref="var"
# declare -a var=([1]="")


# same issue for `local -[ilucAa] ref=...'
f() { local -n ref=var; local ref=1; declare -p ref var; }; var=0; f

var=0; f
# bash: local: `1': invalid variable name for name reference
# declare -n ref="var"
# declare -- var="0"

Reply via email to