]> git.ipfire.org Git - thirdparty/bash.git/blame - tests/more-exp.tests
Imported from ../bash-2.05.tar.gz.
[thirdparty/bash.git] / tests / more-exp.tests
CommitLineData
ccc6cda3
JA
1expect()
2{
3 echo expect "$@"
4}
5
6tool_var() {
7 eval $1=\"\${$1:-$2}\"
8 export $1
9}
10
11A="aaa bbb ccc"
12
13unset B
14
15tool_var B ${B:-"$A"}
16
17expect '<aaa bbb ccc>'
18recho "$A"
19expect '<aaa bbb ccc>'
20recho "$B"
21
22eto_prepend() {
23 eval $1=\'$2\''${'$1':+":"${'$1'}}'; export $1
24}
25
26foo=bar; export foo
27eto_prepend foo baz
28expect '<baz:bar>'
29recho $foo
30expect '<baz:bar>'
31recho ${foo-"bar"}
32
33aa='aaa bbb ccc'
34
35expect '<aaa bbb ccc>'
36recho ${zzz-"$aa"}
37expect '<bar>'
38recho ${zzz:-"bar"}
39expect '<bar>'
40recho "${zzz:-bar}"
41expect '<bar>'
42recho "${zzz:-"bar"}"
43
44var=abcde
45expect '<abcde>'
46recho "${var:-xyz}"
47expect '<abcde>'
48recho "${var:=xyz}"
49expect '<xyz>'
50recho "${var:+xyz}"
51
52set 'a b' c d e f
53expect '<a b> <c> <d> <e> <f>'
54recho ${1+"$@"}
55expect '<a b>'
56recho "${1-"$@"}"
57expect '<a> <b>'
58recho ${1-"$@"}
59expect '<a b> <c> <d> <e> <f>'
60recho "${1+$@}"
61expect '<a b> <c> <d> <e> <f>'
62recho "${1+"$@"}"
63
64HOME=/usr/homes/chet
65somevar=
66expect "<$HOME>"
67recho ${somevar:-~}
68expect "<$HOME>"
69recho "${somevar:-~}"
70expect '<~>'
71recho "${somevar:-"~"}"
72expect '<\~>'
73recho "${somevar:-\~}"
74expect '<\ \~>'
75recho "${somevar:-\ \~}"
76expect '<\ \ \~>'
77recho "${somevar:-\ \ \~}"
78
79expect "<$HOME>"
80recho ${somevar:-$HOME}
81expect "<$HOME>"
82recho "${somevar:-$HOME}"
83expect "<$HOME>"
84recho "${somevar:-"$HOME"}"
85expect '<$HOME>'
86recho "${somevar:-\$HOME}"
87expect '<\ $HOME>'
88recho "${somevar:-\ \$HOME}"
89expect '<\ \ $HOME>'
90recho "${somevar:-\ \ \$HOME}"
91
92foo=bar
93expect "<'bar'>"
94recho "${foo+'$foo'}"
95expect "<'bar'>"
96recho "${fox='$foo'}"
97
98P='*@*'
99expect '<*@*>'
100recho "${P%"*"}"
101expect '<*@*>'
102recho "${P%'*'}"
103
104expect '<*@>'
105recho ${P%"*"}
106expect '<*@>'
107recho ${P%'*'}
108
109expect '<*@*>'
110recho ${P%""}
111expect '<*@*>'
112recho ${P#""}
113
114expect '<*@*>'
115recho ${P#"$foobar"}
116expect '<*@*>'
117recho ${P%"$foobar"}
118
119s1=abcdefghijkl
120s2=efgh
121
122first=${s1/$s2*/}
123expect '<abcd>'
124recho $first
125
126last=${s1##$first}
127expect '<efghijkl>'
128recho $last
129
130shift $#
131UNAME_RELEASE=${1:-4.2MP}
132
133RELEASE=`expr "$UNAME_RELEASE" : '[^0-9]*\([0-9]*\)'` # 4
134case "$RELEASE" in
135"") RELEASE=0 ;;
136*) RELEASE=`expr "$RELEASE" + 0` ;;
137esac
138REL_LEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.\([0-9]*\)'` # 1
139REL_SUBLEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.[0-9]*.\([0-9]*\)'` # 2
140
141expect '<4> <2>'
142recho $RELEASE $REL_LEVEL $REL_SUBLEVEL
143
144b1()
145{
146 b2 ${1+"$@"}
147}
148
149b2()
150{
151 recho $*
152 recho $#
153}
154
155expect '<1>'
156b1 ''
157
158expect '<bar> <2>'
159b1 bar ''
160
161expect '<bar> <2>'
162b1 '' bar
163
164expect '<4>'
165b1 '' '' '' ''
166
167NL="\\
168"
169
170NNL="+$NL+"
171
172expect '<--\> <-->'
173recho --$NL--
174expect '<--\^J-->'
175recho "--$NL--"
176
177expect '<--+\> <+-->'
178recho --$NNL--
179expect '<--+\^J+-->'
180recho "--$NNL--"
181
182expect '<-+\> <+-\> <->'
183recho -$NNL-$NL-
184
185set ''
186expect '<xy>'
187recho "$*xy"
188expect '<xy>'
189recho "x$*y"
190expect '<xy>'
191recho "xy$*"
cce855bc
JA
192expect '<xy>'
193recho x"$*"y
194expect '<xy>'
195recho xy"$*"
196expect '<xy>'
197recho "$*"xy
ccc6cda3
JA
198expect '<>'
199recho "$*"
200expect nothing
201recho $*
202
203unset undef ; set ""
204
cce855bc
JA
205expect '<>'
206recho ${undef-"$*"}
207expect '<xy>'
208recho ${undef-"x$*y"}
209expect '<xy>'
210recho ${undef-"$*xy"}
211expect '<xy>'
212recho ${undef-"xy$*"}
213expect '<xy>'
214recho ${undef-x"$*"y}
215expect '<xy>'
216recho ${undef-xy"$*"}
217expect '<xy>'
218recho ${undef-"$*"xy}
219expect '<>'
220recho "${undef-$*}"
221expect nothing
222recho ${undef-$*}
223
224expect '<>'
ccc6cda3 225recho ${undef-"$zzz"}
cce855bc 226expect '<x>'
ccc6cda3 227recho x${undef-"$zzz"}
cce855bc 228expect '<x>'
ccc6cda3 229recho x${undef-"$@"}
cce855bc 230expect nothing
ccc6cda3 231recho ${undef-"$@"}
cce855bc 232expect '<x>'
ccc6cda3 233recho ${undef-"$zzz"}x
cce855bc 234expect '<x>'
ccc6cda3 235recho ${undef-"$@"}x
cce855bc 236expect '<x>'
ccc6cda3 237recho "$@"x
cce855bc 238expect '<x>'
ccc6cda3 239recho "$zzz"x
cce855bc 240expect '<^?>'
ccc6cda3 241recho ${undef-\7f}
cce855bc 242expect '<^?>'
ccc6cda3
JA
243recho ${undef-"\7f"}
244
245yyy=""
246recho "$xxx"x
247recho "$yyy"x
248
249set "" "abd" ""
250recho "$@"x
251recho "$@"$xxx
252
253OIFS="$IFS"
254
255arg=a,b,c,d,e,f
256
257IFS=,
258
259export z=$arg
260
261eval z1=\"$arg\"
262
263IFS="$OIFS"
264
265recho $z
266recho $z1
267
268# should give an error
269abc\=def
270
271zz="a b c d e"
272declare a=$zz
273
274recho "$a"
275recho $a
276
277recho $(echo "foo$(echo ")")")
278
279# test backslash escapes
280
281recho \a
282recho \\a
283
284recho "\a"
285recho "\\a"
286
287recho '\a'
288recho '\\a'
289
290recho $(zecho \a)
291recho $(zecho \\a)
292
293recho $(zecho "\a")
294recho $(zecho "\\a")
295
296recho $(zecho '\a')
297recho $(zecho '\\a')
298
299recho `zecho \a`
300recho `zecho \\a`
301
302recho `zecho "\a"`
303recho `zecho "\\a"`
304
305recho `zecho '\a'`
306recho `zecho '\\a'`
307
308a=foo
309
310recho \$a
311recho \\$a
312
313recho "\$a"
314recho "\\$a"
315
316recho '\$a'
317recho '\\$a'
318
319recho $(zecho `zecho \a`)
320recho $(zecho `zecho \\a`)
321
322recho $(zecho `zecho "\a"`)
323recho $(zecho `zecho "\\a"`)
324
325recho $(zecho `zecho '\a'`)
326recho $(zecho `zecho '\\a'`)
327
328# should echo G { I K }
329recho ${abc:-G { I } K }
330
331abc=hi
332
333# should echo hi K }
334recho ${abc:-G { I } K }
335
336# should echo a*
337unset foo
338recho "${foo:-"a"}*"
cce855bc
JA
339
340f ()
341{
342 echo "Number of args: $#"
343 echo "<\${*-x}>: <${*-x}>"
344 echo "<\${@-x}>: <${@-x}>"
345}
346
347f
348f ''
349f '' ''
350
351set 1 2 3 4 5
352
353expect '<5>'
354recho ${#}
355expect '<5>'
356recho ${#:foo}
357expect '<5>'
358recho ${#:-foo}
359expect '<5>'
360recho ${#-posparams}
361expect '<5>'
362recho ${#:-posparams}
363
364expect '<0>'
365recho ${#!}
366
367expect nothing
368recho $!
369expect nothing
370recho ${!}
371
372expect nothing
373recho $8
374expect nothing
375recho ${8}
376
377shift $#
378
379expect '<0>'
380recho ${#}
381expect '<0>'
382recho ${#:foo}
383expect '<0>'
384recho ${#:-foo}
385expect '<0>'
386recho ${#-posparams}
387expect '<0>'
388recho ${#:-posparams}
389
390expect '<posparams>'
391recho ${!-posparams}
392expect '<posparams>'
393recho ${!:-posparams}
394
395expect '<2>'
396recho ${#-}
397
398expect '<0>'
399recho ${#-posparams}
400
401expect '<0>'
402recho ${#?:-xyz}
403
404expect '<1>'
405recho ${#?}
406
407set a b c d e
408
409expect '<5>'
410recho ${#}
411expect '<5>'
412recho ${#?:-xyz}
413
414shift $#
415
416expect '<0>'
417recho ${#:-foo}
418
419expect a bad substitution error
420recho ${#:}
421expect a bad substitution error
422recho ${#/}
423expect a bad substitution error
424recho ${#%}
425expect a bad substitution error
426recho ${#=}
427expect a bad substitution error
428recho ${#+}
429expect a bad substitution error
430recho ${#1xyz}
431
432expect a math syntax error
433recho ${#:%}
434
435expect '<0>'
436recho ${#:-}
b72432fd
JA
437
438set --
439unset a b
440
441x=a
442y=b
443
444IFS=+
445
446expect '<a+b>'
447recho $x+$y
448expect '<+>'
449recho $a+$b
450
451expect '<+>'
452recho + "$@"
453expect '<+>'
454recho +"$@"
455
bb70624e
JA
456# variants of nested curly braces inside ${...} expressions
457
458# IFS is not the standard one
459
b72432fd
JA
460expect '<G { I>' '<K>' '<}>'
461recho ${gik:-G { I } K }
462
463abc=hi
464
465expect '<hi>' '<K>' '<}>'
466recho ${abc:-G { I } K }
bb70624e
JA
467
468# reset IFS to the default
469IFS='
470'
471
472# nested ${...} inside ${...} are handled specially
473unset XXX FOO BAR
474expect '<xxx>' '<yyy>'
475XXX=xxx
476FOO=${BAR:-${XXX} yyy}
477recho $FOO
478
479# this was a bug in versions of bash prior to bash-2.04-release
480set -- ''
481expect 1
482echo $#
483expect '<>'
28ef6c31
JA
484recho "${@}"
485expect '<>'
486recho "${@-}"
487expect '<>'
488recho "${@:-}"
489
490# this was a bug in bash-2.04, fixed in 2.05
491set -- a b
492expect '<:a:>' '<:b:>'
493for i in "${@-}"; do recho :$i:; done
494
495# I believe that ksh93 does these wrong -- we're using the rhs, so shouldn't
496# it behave the same as ""?
497set --
498expect '<>'
499recho "${@-}"
500expect '<>'
bb70624e 501recho "${@:-}"