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