]> git.ipfire.org Git - thirdparty/bash.git/blob - tests/new-exp.tests
Imported from ../bash-2.0.tar.gz.
[thirdparty/bash.git] / tests / new-exp.tests
1 expect()
2 {
3 echo expect "$@"
4 }
5
6 HOME=/usr/homes/chet # to make the check against new-exp.right work
7 expect '<foo bar>'
8 recho "${undef-"foo bar"}" # should be foo bar
9 expect '<foo>'
10 recho "${und="foo"}" # should be foo
11
12 expect "<$HOME>"
13 recho ${HOME-"}"}
14 expect "<$HOME>"
15 recho "${HOME-'}'}"
16 expect "<$HOME>"
17 recho "${HOME-"}"}"
18
19 expect $0: 'HOME: }: syntax error: operand expected (error token is "}")'
20 recho "${HOME:`echo }`}" # should be a math error -- bad substring substitution
21
22 expect unset
23 _ENV=oops
24 x=${_ENV[(_$-=0)+(_=1)-_${-%%*i*}]} # memory leak
25 echo ${x:-unset}
26
27 expect "<$HOME>"
28 recho ${HOME}
29 expect "<$HOME>"
30 recho ${HOME:-`echo }`}
31 expect "<$HOME>"
32 recho ${HOME:-`echo "}"`}
33 expect "<$HOME>"
34 recho "${HOME:-`echo "}"`}"
35 expect "<$HOME>"
36 recho "$(echo "${HOME}")"
37 expect "<$HOME>"
38 recho "$(echo "$(echo ${HOME})")"
39 expect "<$HOME>"
40 recho "$(echo "$(echo "${HOME}")")"
41
42 P=*@*
43 expect '<*@*>'
44 recho "${P%"*"}" #
45 expect '<*@*>'
46 recho "${P%'*'}" #
47 expect '<@*>'
48 recho "${P#\*}" # should be @*
49
50 expect '<)>'
51 recho "$(echo ")")" # should be )
52 expect '<")">'
53 recho "$(echo "\")\"")" # should be ")"
54
55 foo='abcd '
56 expect '<-abcd> <->'
57 recho -${foo}- # should be -abcd -
58 expect '<-abcd> <->'
59 recho -${foo% *}- # should be -abcd -
60 expect '<-abcd->'
61 recho -${foo%% *}- # should be -abcd-
62
63 set a b c d e
64 expect '<a b c d e>'
65 IFS=""
66 recho "$@"
67 IFS='
68 '
69
70 foo=bar
71 expect '<bar foo>'
72 echo -n $foo' ' ; echo foo
73
74 expect '<bar foo>'
75 echo -n $foo" " ; echo foo
76
77 expect '<bar foo>'
78 echo -n "$foo " ; echo foo
79
80 expect '<barfoo>'
81 echo -e "$foo\c " ; echo foo
82
83 expect '<barfoo>'
84 echo -e $foo"\c " ; echo foo
85
86 # substring tests
87 z=abcdefghijklmnop
88 expect '<abcd>'
89 recho ${z:0:4}
90
91 expect '<efg> <nop>'
92 recho ${z:4:3} ${z:${#z}-3:3}
93
94 expect '<hijklmnop>'
95 recho ${z:7:30}
96
97 expect '<abcdefghijklmnop>'
98 recho ${z:0:100}
99
100 expect '<abcdefghijklmnop>'
101 recho ${z:0:${#z}}
102
103 set 'ab cd' 'ef' 'gh ij' 'kl mn' 'op'
104 expect '<ab cd> <ef>'
105 recho "${@:1:2}"
106
107 expect '<gh ij> <kl mn>'
108 recho "${@:3:2}"
109
110 expect '<gh ij> <kl mn> <op>'
111 recho "${@:3:4}"
112
113 expect '<ab cd> <ef> <gh ij> <kl mn> <op>'
114 recho "${@:1:$#}"
115
116 # indirect variable references
117 expect '<abcdefghijklmnop>'
118 recho ${!9:-$z}
119
120 ef=4
121 expect '<4>'
122 recho ${!2}
123
124 expect '<op>'
125 recho ${!#}
126
127 set a b c d e
128 a=
129 expect '<abcdefghijklmnop>'
130 recho ${a:-$z}
131 expect '<abcdefghijklmnop>'
132 recho ${!1:-$z}
133
134 expect nothing
135 recho ${a-$z}
136 expect nothing
137 recho ${!1-$z}
138
139 set -u
140 expect $0: ABX: unbound variable
141 recho ${ABX}
142 set +u
143
144 expect $0: '$6: cannot assign in this way'
145 recho ${6="arg6"}
146
147 v=abcde
148
149 # sed-like variable substitution
150 expect '<xxcde>'
151 recho ${v/a[a-z]/xx}
152 expect '<axxde>'
153 recho ${v/a??/axx}
154 expect '<abxyz>'
155 recho ${v/c??/xyz}
156 expect '<abbcde>'
157 recho ${v/#a/ab}
158 expect '<abcde>'
159 recho ${v/#d/ab}
160 expect '<abcabe>'
161 recho ${v/d/ab}
162 expect '<abcdlast>'
163 recho ${v/%?/last}
164 expect '<abcde>'
165 recho ${v/%x/last}
166
167 av=(abcd efgh ijkl mnop qrst uvwx)
168
169 expect '<xxcd>'
170 recho ${av/??/xx}
171 expect '<abxx>'
172 recho ${av/%??/xx}
173 expect '<xxgh>'
174 recho ${av[1]/??/xx}
175 expect '<efgh>'
176 recho ${av[1]/%ab/xx}
177 expect '<xxfgh>'
178 recho ${av[1]/#?/xx}
179 expect '<zagh>'
180 recho ${av[1]/??/za}
181 expect '<zaza>'
182 recho ${av[1]//??/za}
183 expect '<zagh>'
184 recho ${av[1]//#??/za}
185 expect '<efza>'
186 recho ${av[1]//%??/za}
187
188 expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>'
189 recho ${av[@]/*/yyy}
190 expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>'
191 recho ${av[@]/#*/yyy}
192 expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>'
193 recho ${av[@]/%*/yyy}
194 expect '<yyy> <efgh> <ijkl> <mnop> <qrst> <uvwx>'
195 recho ${av[@]/a*/yyy}
196 expect '<abxx> <efxx> <ijxx> <mnxx> <qrxx> <uvxx>'
197 recho ${av[@]/%??/xx}
198
199 set abcd efgh ijkl mnop qrst uvwx
200
201 expect '<xxcd>'
202 recho ${1/??/xx}
203 expect '<xxcd> <xxgh> <xxkl> <xxop> <xxst> <xxwx>'
204 recho ${@/??/xx}
205 expect '<xxcd> <xxgh> <xxkl> <xxop> <xxst> <xxwx>'
206 recho ${@/%??/xx}
207 expect '<zaza>'
208 recho ${3//??/za}
209 expect '<efza>'
210 recho ${3//%??/za}
211 expect '<zaza> <zaza> <zaza> <zaza> <zaza> <zaza>'
212 recho ${@//??/za}
213 expect '<zacd> <zagh> <zakl> <zaop> <zast> <zawx>'
214 recho ${@//#??/za}
215 expect '<yyy> <yyy> <yyy> <yyy> <yyy> <yyy>'
216 recho ${@//*/yyy}
217 expect '<yyy> <efgh> <ijkl> <mnop> <qrst> <uvwx>'
218 recho ${@//a*/yyy}
219 expect '<abcd> <efgh> <ijkl> <mnop> <qrst> <uvwyyy>'
220 recho ${@//%x*/yyy}
221
222 expect a newline
223 echo $abmcde
224
225 expect this is a test of proc subst
226 cat <(echo this is a test of proc subst)
227 echo this is test 2 > /tmp/x
228 expect this is test 2
229 cat <(cat /tmp/x)
230 rm -f /tmp/x
231
232 expect $0: '${#:-foo}: bad substitution'
233 echo ${#:-foo}
234 expect $0: '${#:}: bad substitution'
235 echo ${#:}
236
237 expect "<'>"
238 recho "'"
239 expect '<">'
240 recho '"'
241 expect '<"hello">'
242 recho "\"hello\""
243
244 shift $#
245 unset foo
246 z=abcdef
247 z1='abc def'
248
249 expect '<>'
250 recho ${foo:-""}
251 expect nothing
252 recho ${foo:-"$@"}
253 expect '<>'
254 recho "${foo:-$@}"
255
256 # unset var
257 expect '<>'
258 recho ${foo:-"$zbcd"}
259 expect nothing
260 recho ${foo:-$zbcd}
261
262 # set var
263 expect '<abcdef>'
264 recho ${foo:-"$z"}
265 expect '<abc def>'
266 recho ${foo:-"$z1"}
267
268 expect '<abcdef>'
269 recho ${foo:-$z}
270 expect '<abc> <def>'
271 recho ${foo:-$z1}
272
273 expect '<abcdef>'
274 recho "${foo:-$z}"
275 expect '<abc def>'
276 recho "${foo:-$z1}"
277
278 expect '<abcdef>'
279 recho "${foo:-"$z"}"
280 # this disagrees with sh and ksh, but I think it is right according
281 # to posix.2.
282 expect '<abc def>'
283 recho "${foo:-"$z1"}"
284
285 set ab cd ef gh
286 expect '<ab> <cd> <ef> <gh>'
287 recho ${foo:-"$@"}
288 expect '<ab> <cd> <ef> <gh>'
289 recho "${foo:-$@}"
290 expect '<ab> <cd> <ef> <gh>'
291 recho "${foo:-"$@"}"
292
293 shift $#
294 expect nothing
295 recho $xxx"$@"
296 expect nothing
297 recho ${foo:-$xxx"$@"}
298 expect '<>'
299 recho "${foo:-$xxx$@}"
300 expect '<>'
301 recho "${foo:-$xxx"$@"}"
302
303 expect nothing
304 recho $xxx"$@"
305 expect nothing
306 recho "$xxx$@"
307 expect nothing
308 recho "$@"$xxx
309
310 expect '<>'
311 recho $xxx""
312 expect '<>'
313 recho $xxx''
314 expect '<>'
315 recho ''$xxx
316 expect '<>'
317 recho ""$xxx
318
319 AB='abcdefghijklmnopqrstuvwxyz'
320
321 recho ${AB:7:15}
322 recho ${AB:15:7}
323
324 recho ${AB:20}
325
326 recho ${AB:0}
327 recho ${AB:0:20}
328
329 recho ${AB:10:7}
330 recho ${AB:10:3+4}
331 recho ${AB:20/2:3+4}
332
333 set 1 2 3 4 5 6
334 recho \""${*:2:2}"\"
335
336 IFS=:
337 recho \""${*:2:2}"\"
338
339 IFS=$' \t\n'
340
341 z=123456
342
343 recho \""${z:2:2}"\"
344 recho \""${z:2}"\"
345 recho \""${z:2:4}"\"
346 recho \""${z:2:6}"\"
347
348 set $'\1' $'\2' $'\177'
349
350 recho $*
351 recho $@
352
353 recho ${*}
354 recho ${@}
355
356 xx=one/two/two
357 recho ${xx%/*}
358 recho ${xx/\/two}
359
360 yy=oneonetwo
361 recho ${yy//one}
362 recho ${yy/\/one}
363
364 xx=oneonetwo
365
366 recho ${xx/one}
367 recho ${xx//one}
368 recho ${xx/\/one}
369
370 # this must be last!
371 expect $0: 'ABXD: parameter unset'
372 recho ${ABXD:?"parameter unset"}