# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # f() { local -n a=$1; a=X; } a=(0); f 'a[0]' while [[ -v a ]]; do declare -p a; unset a; done a=(0); f 'a' while [[ -v a ]]; do declare -p a; unset a; done b=(0); f 'b[0]' while [[ -v a ]]; do typeset -p a; unset a; done typeset -p b b=(0); f 'a[0]' while [[ -v a ]]; do typeset -p a; unset a; done typeset -p b add_X_echo() { typeset -n ref=$1 ref+=X echo inside $ref } ref= add_X_echo ref echo outside "$ref" unset ref # same test, but assigning nameref variable circular reference directly xxx_func() { typeset -n xxx=xxx xxx=foo declare -p xxx echo $FUNCNAME: inside: xxx = $xxx } xxx=7 echo before: $xxx xxx_func echo after: $xxx unset xxx unset -f xxx_func typeset -n ref=ref typeset -n ref=re ref+=f typeset -p ref ref=4 typeset -p ref re export ref printenv ref printenv re unset ref ; unset -n ref unset foo; unset -n foo typeset -n foo=var[@] typeset -p foo typeset -n ref=var ref+=[@] typeset -p ref ref=42 typeset -n bar bar=var[@] typeset -p bar bar=7 unset a b unset -n a b typeset -n a=b b b=a[1] typeset -p a b a=foo typeset -p a b unset a typeset -n a=b declare a=foo typeset -p a b unset n v unset -n n v v=(0 1) typeset -n n=v unset n[0] typeset -p n v unset -n n v=(0 1) typeset -n n=v unset -n n typeset -p n v v=(0 1) declare -n n=v[1] unset n declare -p n v declare -n xref declare -a xref[1]=one declare -p xref unset xref declare -n xref xref=array declare -a xref[1]=one declare -p xref