# 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 . # function f1 { typeset -n v=$1 v=inside } v=global f1 v echo $v unset v unset -f f1 function foo { typeset x=one typeset -n y=$1 y=two echo inside: $x } foo x echo outside: $x function foo2 { typeset -n x=$1 x=foo } foo2 x echo $x unset -f foo function foo { typeset -n v=$1; v=local; } v=global foo v echo $v unset v # invalid self reference at global scope typeset -n v=v # can we catch a circular self-reference? typeset -n v=w typeset -n w=x typeset -n x=v x=4 echo x = $x unset -n v w x # can we keep local variables invisible when we add nameref attribute? function f { typeset x; typeset -n x; x=y; } f