| # 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 <http://www.gnu.org/licenses/>. |
| # |
| 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 |