improve of cmpl.
[bush.git] / tests / nameref.tests
blob3a6c5d98e11762db9e7a170b5c3afdab7dffffbb
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.
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.
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/>.
14 # basic nameref tests
15 bar=one
16 flow=two
17 flip=three
19 foo=bar
20 typeset -n foo
22 typeset -n fee=flow
24 echo ${foo}
25 echo ${fee}
27 typeset -n fee=flip
28 echo ${fee}
30 typeset -n
32 echo turning off nameref attribute on foo
33 typeset +n foo=other
34 echo ${foo}
35 echo after +n foo bar = $bar
37 unset foo bar fee
39 bar=one
41 foo=bar
42 typeset -n foo
44 foo=two printf "%s\n" $foo
45 foo=two eval 'printf "%s\n" $foo'
47 foo=two echo $foo
49 unset foo bar
50 # other basic assignment tests
51 bar=one
53 echo "expect <one>"
54 recho ${bar}
55 typeset -n foo=bar
56 foo=two
58 echo "expect <two>"
59 recho ${bar}
61 # this appears to be a ksh93 bug; it doesn't unset foo here and messes up
62 # later
63 unset foo bar
65 # initial tests of working inside shell functions
66 echoval()
68         typeset -n ref=$1
69         printf "%s\n" $ref
72 foo=bar
73 bar=one
74 echo "expect <$foo>"
75 echoval foo
76 echo "expect <$bar>"
77 echoval bar
79 unset foo bar
80 changevar()
82         typeset -n v=$1
84         shift
85         v="$@"
86         echo "changevar: expect <$@>"
87         recho "$v"
90 bar=one
92 echo "expect <one>"
93 recho ${bar}
94 changevar bar two
95 echo "expect <two>"
96 recho $bar
98 changevar bar three four five
99 echo "expect <three four five>"
100 recho "$bar"
102 unset foo bar
103 unset -n foo bar
104 readonly foo=one
105 typeset -n bar=foo
106 bar=4
107 foo=4
109 echo $foo
110 echo $bar
112 assignvar()
114         typeset -n ref=$1
115         shift
116         ref="$@"
119 readonly foo=one
121 assignvar foo two three four
122 echo $foo
124 var=abcde
125 x=var
126 declare -n v=var
127 # these two should display the same
128 echo ${!x//c/x}
129 echo ${v//c/x}
131 for testfile in ./nameref[0-9].sub ./nameref[1-9][0-9].sub ; do
132         ${THIS_SH} "$testfile"
133 done