summaryrefslogtreecommitdiffstats
path: root/tests/nameref.tests
blob: f4af904cd8d68835f830b3191efe836381e7292b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# basic nameref tests
bar=one
flow=two
flip=three

foo=bar
typeset -n foo

typeset -n fee=flow

echo ${foo}
echo ${fee}

typeset -n fee=flip
echo ${fee}

typeset -n

echo turning off nameref attribute on foo
typeset +n foo=other
echo ${foo}
echo after +n foo bar = $bar

unset foo bar fee

bar=one

foo=bar
typeset -n foo

foo=two printf "%s\n" $foo
foo=two eval 'printf "%s\n" $foo'

foo=two echo $foo

unset foo bar
# other basic assignment tests
bar=one

echo "expect <one>"
recho ${bar}
typeset -n foo=bar
foo=two

echo "expect <two>"
recho ${bar}

# this appears to be a ksh93 bug; it doesn't unset foo here and messes up
# later
unset foo bar

# initial tests of working inside shell functions
echoval()
{
	typeset -n ref=$1
	printf "%s\n" $ref
}

foo=bar
bar=one
echo "expect <$foo>"
echoval foo
echo "expect <$bar>"
echoval bar

unset foo bar
changevar()
{
	typeset -n v=$1

	shift
	v="$@"
	echo "changevar: expect <$@>"
	recho "$v"
}

bar=one

echo "expect <one>"
recho ${bar}
changevar bar two
echo "expect <two>"
recho $bar

changevar bar three four five
echo "expect <three four five>"
recho "$bar"

unset foo bar
unset -n foo bar
readonly foo=one
typeset -n bar=foo
bar=4
foo=4

echo $foo
echo $bar

assignvar()
{
	typeset -n ref=$1
	shift
	ref="$@"
}

readonly foo=one

assignvar foo two three four
echo $foo

var=abcde
x=var
declare -n v=var
# these two should display the same
echo ${!x//c/x}
echo ${v//c/x}

for testfile in ./nameref[0-9].sub ./nameref[1-9][0-9].sub ; do
	${THIS_SH} "$testfile"
done