]> git.ipfire.org Git - thirdparty/bash.git/blame - tests/extglob.tests
Bash-4.3 patch 7
[thirdparty/bash.git] / tests / extglob.tests
CommitLineData
cce855bc
JA
1# test the ksh-like extended globbing features: [!@*?+](patlist)
2
3shopt -s extglob
4
5expect()
6{
7 echo expect "$@"
8}
9
10case "/dev/udp/129.22.8.102/45" in
11/dev/@(tcp|udp)/*/*) echo ok 1;;
12*) echo bad 1;;
13esac
14
15# valid numbers
16case 12 in
170|[1-9]*([0-9])) echo ok 2;;
18*) echo bad 2;;
19esac
20
21case 12abc in
220|[1-9]*([0-9])) echo bad 3;;
23*) echo ok 3;;
24esac
25
26case 1 in
270|[1-9]*([0-9])) echo ok 4;;
28*) echo bad 4;;
29esac
30
31# octal numbers
32case 07 in
33+([0-7])) echo ok 5;;
34*) echo bad 5;;
35esac
36
37case 0377 in
38+([0-7])) echo ok 6;;
39*) echo bad 6;;
40esac
41
42case 09 in
43+([0-7])) echo bad 7;;
44*) echo ok 7;;
45esac
46
47# stuff from korn's book
48case paragraph in
49para@(chute|graph)) echo ok 8;;
50*) echo bad 8;;
51esac
52
53case paramour in
54para@(chute|graph)) echo bad 9;;
55*) echo ok 9;;
56esac
57
58case para991 in
59para?([345]|99)1) echo ok 10;;
60*) echo bad 10;;
61esac
62
63case para381 in
64para?([345]|99)1) echo bad 11;;
65*) echo ok 11;;
66esac
67
68case paragraph in
69para*([0-9])) echo bad 12;;
70*) echo ok 12;;
71esac
72
73case para in
74para*([0-9])) echo ok 13;;
75*) echo bad 13;;
76esac
77
78case para13829383746592 in
79para*([0-9])) echo ok 14;;
80*) echo bad 14;;
81esac
82
83case paragraph in
84para*([0-9])) echo bad 15;;
85*) echo ok 15;;
86esac
87
88case para in
89para+([0-9])) echo bad 16;;
90*) echo ok 16;;
91esac
92
93case para987346523 in
94para+([0-9])) echo ok 17;;
95*) echo bad 17;;
96esac
97
98case paragraph in
99para!(*.[0-9])) echo ok 18;;
100*) echo bad 18;;
101esac
102
103case para.38 in
104para!(*.[0-9])) echo ok 19;;
105*) echo bad 19;;
106esac
107
108case para.graph in
109para!(*.[0-9])) echo ok 20;;
110*) echo bad 20;;
111esac
112
113case para39 in
114para!(*.[0-9])) echo ok 21;;
115*) echo bad 21;;
116esac
117
118# tests derived from those in rosenblatt's korn shell book
119
120case "" in
121*(0|1|3|5|7|9)) echo ok 22;;
122*) echo bad 22;
123esac
124
125case 137577991 in
126*(0|1|3|5|7|9)) echo ok 23;;
127*) echo bad 23;
128esac
129
130case 2468 in
131*(0|1|3|5|7|9)) echo bad 24;;
132*) echo ok 24;
133esac
134
135case file.c in
136*.c?(c)) echo ok 25;;
137*) echo bad 25;;
138esac
139
140case file.C in
141*.c?(c)) echo bad 26;;
142*) echo ok 26;;
143esac
144
145case file.cc in
146*.c?(c)) echo ok 27;;
147*) echo bad 27;;
148esac
149
150case file.ccc in
151*.c?(c)) echo bad 28;;
152*) echo ok 28;;
153esac
154
155case parse.y in
156!(*.c|*.h|Makefile.in|config*|README)) echo ok 29;;
157*) echo bad 29;;
158esac
159
160case shell.c in
161!(*.c|*.h|Makefile.in|config*|README)) echo bad 30;;
162*) echo ok 30;;
163esac
164
165case Makefile in
166!(*.c|*.h|Makefile.in|config*|README)) echo ok 31;;
167*) echo bad 31;;
168esac
169
170case "VMS.FILE;1" in
171*\;[1-9]*([0-9])) echo ok 32;;
172*) echo bad 32;;
173esac
174
175case "VMS.FILE;0" in
176*\;[1-9]*([0-9])) echo bad 33;;
177*) echo ok 33;;
178esac
179case "VMS.FILE;" in
180*\;[1-9]*([0-9])) echo bad 34;;
181*) echo ok 34;;
182esac
183case "VMS.FILE;139" in
184*\;[1-9]*([0-9])) echo ok 35;;
185*) echo bad 35;;
186esac
187case "VMS.FILE;1N" in
188*\;[1-9]*([0-9])) echo bad 36;;
189*) echo ok 36;;
190esac
191
192# tests derived from the pd-ksh test suite
193
194MYDIR=$PWD # save where we are
195
0001803f
CR
196: ${TMPDIR:=/var/tmp}
197TESTDIR=$TMPDIR/eglob-test-$$
cce855bc
JA
198mkdir $TESTDIR
199builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; }
200rm -rf *
201
202touch abcx abcz bbc
203expect '!([*)*'
204echo !([*)*
205
206expect '+(a|b[)*'
207echo +(a|b[)*
208
209expect '[a*(]*z'
210echo [a*(]*)z
211
212rm -f abcx abcz bbc
213
214touch abc
215
216expect '+()c'
217echo +()c
218expect '+()x'
219echo +()x
220expect abc
221echo +(*)c
222expect '+(*)x'
223echo +(*)x
224
225# extended globbing should not be performed on the output of substitutions
226x='@(*)'
227expect '@(*)'
228echo $x
229
230expect 'no-file+(a|b)stuff'
231echo no-file+(a|b)stuff
232expect 'no-file+(a*(c)|b)stuff'
233echo no-file+(a*(c)|b)stuff
234
235touch abd acd
236
237expect 'abd acd'
238echo a+(b|c)d
239
240expect 'acd'
241echo a!(@(b|B))d
242
243expect 'abd'
244echo a[b*(foo|bar)]d
245
246# simple kleene star tests
247expect no
248case foo in *(a|b[)) echo yes;; *) echo no;; esac
249
250expect yes
251case foo in *(a|b[)|f*) echo yes;; *) echo no;; esac
252
253# this doesn't work right yet; it is an incorrectly formed pattern
254expect yes
255case '*(a|b[)' in *(a|b[)) echo yes;; *) echo no;; esac
256
257# check extended globbing in pattern removal -- these don't work right yet
258x=abcdef
259
260expect '1: bcdef'
261echo 1: ${x#+(a|abc)}
262expect '2: def'
263echo 2: ${x##+(a|abc)}
264expect '3: abcde'
265echo 3: ${x%+(def|f)}
266expect '4: abc'
267echo 4: ${x%%+(f|def)}
268
269# these work ok
270
271expect '5: ef'
272echo 5: ${x#*(a|b)cd}
273expect '6: ef'
274echo 6: "${x#*(a|b)cd}"
275expect '7: abcdef'
276echo 7: ${x#"*(a|b)cd"}
277
b72432fd
JA
278# More tests derived from a bug report concerning extended glob patterns
279# following a *
280builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; }
281rm -rf *
282
283touch ab abcdef abef abcfef
284
285expect 'ab abef'
286echo ab*(e|f)
287
288expect 'abcfef abef'
289echo ab?*(e|f)
290
291expect abcdef
292echo ab*d+(e|f)
293
294expect 'ab abcdef abcfef abef'
295echo ab**(e|f)
296
297expect 'abcdef abcfef abef'
298echo ab*+(e|f)
299
300case 'abcfefg' in
301ab**(e|f)) echo ok 37;;
302*) echo bad 37;;
303esac
304
305case 'abcfefg' in
306ab**(e|f)g) echo ok 38;;
307*a) echo bad 38;;
308esac
309
310case ab in
311ab*+(e|f)) echo bad 39;;
312*) echo ok 39;;
313esac
314
315case abef in
316ab***ef) echo ok 40;;
317*) echo bad 40;;
318esac
319
320case abef in
321ab**) echo ok 41;;
322*) echo bad 41;;
323esac
324
b80f6443
JA
325# bug in all versions up to and including bash-2.05b
326case "123abc" in
327*?(a)bc) echo ok 42;;
328*) echo bad 42;;
329esac
330
b72432fd
JA
331# clean up and do the next one
332
333builtin cd /
334rm -rf $TESTDIR
335
336mkdir $TESTDIR
337builtin cd $TESTDIR
338
bb70624e 339LC_COLLATE=C # have to set this; it affects the sorting
b72432fd
JA
340touch a.b a,b a:b a-b a\;b a\ b a_b
341
342echo a[^[:alnum:]]b
343echo a[-.,:\;\ _]b
344
345echo a@([^[:alnum:]])b
346echo a@([-.,:; _])b
347echo a@([.])b
348echo a@([^.])b
349echo a@([^x])b
350echo a+([^[:alnum:]])b
351
352echo a@(.|[^[:alnum:]])b
cce855bc
JA
353
354builtin cd /
355rm -rf $TESTDIR
356
95732b49
JA
357x=abcdef
358recho "${x#*(a|b)cd}"
359
3185942a
JA
360TEST='a , b'
361shopt -s globstar
362echo ${TEST//*([[:space:]]),*([[:space:]])/,}
363shopt -u globstar
364
cce855bc
JA
365# this is for the benefit of pure coverage, so it writes the pcv file
366# in the right place
3185942a 367builtin cd "$MYDIR"
cce855bc 368
0628567a
JA
369${THIS_SH} ./extglob1.sub
370
ac50fbac
CR
371${THIS_SH} ./extglob1a.sub
372
cce855bc 373exit 0