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