]> git.ipfire.org Git - thirdparty/bash.git/blob - tests/nameref8.sub
bash-5.1-alpha release
[thirdparty/bash.git] / tests / nameref8.sub
1 # This program is free software: you can redistribute it and/or modify
2 # it under the terms of the GNU General Public License as published by
3 # the Free Software Foundation, either version 3 of the License, or
4 # (at your option) any later version.
5 #
6 # This program is distributed in the hope that it will be useful,
7 # but WITHOUT ANY WARRANTY; without even the implied warranty of
8 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 # GNU General Public License for more details.
10 #
11 # You should have received a copy of the GNU General Public License
12 # along with this program. If not, see <http://www.gnu.org/licenses/>.
13 #
14 function f1
15 {
16 typeset -n v=$1
17
18 v=inside
19 }
20
21 v=global
22 f1 v
23 echo $v
24
25 unset v
26 unset -f f1
27
28 function foo
29 {
30 typeset x=one
31
32 typeset -n y=$1
33 y=two
34 echo inside: $x
35 }
36
37 foo x
38 echo outside: $x
39
40 function foo2
41 {
42 typeset -n x=$1
43
44 x=foo
45 }
46
47 foo2 x
48 echo $x
49
50 unset -f foo
51 function foo { typeset -n v=$1; v=local; }
52
53 v=global
54 foo v
55 echo $v
56
57 unset v
58
59 # invalid self reference at global scope
60 typeset -n v=v
61
62 # can we catch a circular self-reference?
63 typeset -n v=w
64 typeset -n w=x
65 typeset -n x=v
66
67 x=4
68 echo x = $x
69
70 unset -n v w x
71
72 # can we keep local variables invisible when we add nameref attribute?
73 function f { typeset x; typeset -n x; x=y; }
74 f