Multiple variables with the same name are created at the same scope when
doing assignments to subscripts of nameref variables that point to
variables that are unset.

$ unset var; declare -n ref=var; ref[0]=foo
$ declare -p refdeclare -a ref=([0]="foo")

I think the more reasonable thing would be to create a new array variable
$var.

But the even weirder thing is that the original $ref is still there!

$ unset ref; declare -p refdeclare -n ref="var"

Even more values can be piled up with functions:

$ ref=global
$ f() { declare -n ref=var; ref[0]=foo1; }; f
$ f() { declare -n ref=var; ref[0]=foo2; }; f
$ declare -p refdeclare -a ref=([0]="foo2")
$ unset ref; declare -p refdeclare -a ref=([0]="foo1")
$ unset ref; declare -p refdeclare -- ref="global"

​

Reply via email to