]>
Commit | Line | Data |
---|---|---|
cce855bc JA |
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 | ||
0628567a | 196 | TESTDIR=/tmp/eglob-test-$$ |
cce855bc JA |
197 | mkdir $TESTDIR |
198 | builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; } | |
199 | rm -rf * | |
200 | ||
201 | touch abcx abcz bbc | |
202 | expect '!([*)*' | |
203 | echo !([*)* | |
204 | ||
205 | expect '+(a|b[)*' | |
206 | echo +(a|b[)* | |
207 | ||
208 | expect '[a*(]*z' | |
209 | echo [a*(]*)z | |
210 | ||
211 | rm -f abcx abcz bbc | |
212 | ||
213 | touch abc | |
214 | ||
215 | expect '+()c' | |
216 | echo +()c | |
217 | expect '+()x' | |
218 | echo +()x | |
219 | expect abc | |
220 | echo +(*)c | |
221 | expect '+(*)x' | |
222 | echo +(*)x | |
223 | ||
224 | # extended globbing should not be performed on the output of substitutions | |
225 | x='@(*)' | |
226 | expect '@(*)' | |
227 | echo $x | |
228 | ||
229 | expect 'no-file+(a|b)stuff' | |
230 | echo no-file+(a|b)stuff | |
231 | expect 'no-file+(a*(c)|b)stuff' | |
232 | echo no-file+(a*(c)|b)stuff | |
233 | ||
234 | touch abd acd | |
235 | ||
236 | expect 'abd acd' | |
237 | echo a+(b|c)d | |
238 | ||
239 | expect 'acd' | |
240 | echo a!(@(b|B))d | |
241 | ||
242 | expect 'abd' | |
243 | echo a[b*(foo|bar)]d | |
244 | ||
245 | # simple kleene star tests | |
246 | expect no | |
247 | case foo in *(a|b[)) echo yes;; *) echo no;; esac | |
248 | ||
249 | expect yes | |
250 | case foo in *(a|b[)|f*) echo yes;; *) echo no;; esac | |
251 | ||
252 | # this doesn't work right yet; it is an incorrectly formed pattern | |
253 | expect yes | |
254 | case '*(a|b[)' in *(a|b[)) echo yes;; *) echo no;; esac | |
255 | ||
256 | # check extended globbing in pattern removal -- these don't work right yet | |
257 | x=abcdef | |
258 | ||
259 | expect '1: bcdef' | |
260 | echo 1: ${x#+(a|abc)} | |
261 | expect '2: def' | |
262 | echo 2: ${x##+(a|abc)} | |
263 | expect '3: abcde' | |
264 | echo 3: ${x%+(def|f)} | |
265 | expect '4: abc' | |
266 | echo 4: ${x%%+(f|def)} | |
267 | ||
268 | # these work ok | |
269 | ||
270 | expect '5: ef' | |
271 | echo 5: ${x#*(a|b)cd} | |
272 | expect '6: ef' | |
273 | echo 6: "${x#*(a|b)cd}" | |
274 | expect '7: abcdef' | |
275 | echo 7: ${x#"*(a|b)cd"} | |
276 | ||
b72432fd JA |
277 | # More tests derived from a bug report concerning extended glob patterns |
278 | # following a * | |
279 | builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; } | |
280 | rm -rf * | |
281 | ||
282 | touch ab abcdef abef abcfef | |
283 | ||
284 | expect 'ab abef' | |
285 | echo ab*(e|f) | |
286 | ||
287 | expect 'abcfef abef' | |
288 | echo ab?*(e|f) | |
289 | ||
290 | expect abcdef | |
291 | echo ab*d+(e|f) | |
292 | ||
293 | expect 'ab abcdef abcfef abef' | |
294 | echo ab**(e|f) | |
295 | ||
296 | expect 'abcdef abcfef abef' | |
297 | echo ab*+(e|f) | |
298 | ||
299 | case 'abcfefg' in | |
300 | ab**(e|f)) echo ok 37;; | |
301 | *) echo bad 37;; | |
302 | esac | |
303 | ||
304 | case 'abcfefg' in | |
305 | ab**(e|f)g) echo ok 38;; | |
306 | *a) echo bad 38;; | |
307 | esac | |
308 | ||
309 | case ab in | |
310 | ab*+(e|f)) echo bad 39;; | |
311 | *) echo ok 39;; | |
312 | esac | |
313 | ||
314 | case abef in | |
315 | ab***ef) echo ok 40;; | |
316 | *) echo bad 40;; | |
317 | esac | |
318 | ||
319 | case abef in | |
320 | ab**) echo ok 41;; | |
321 | *) echo bad 41;; | |
322 | esac | |
323 | ||
b80f6443 JA |
324 | # bug in all versions up to and including bash-2.05b |
325 | case "123abc" in | |
326 | *?(a)bc) echo ok 42;; | |
327 | *) echo bad 42;; | |
328 | esac | |
329 | ||
b72432fd JA |
330 | # clean up and do the next one |
331 | ||
332 | builtin cd / | |
333 | rm -rf $TESTDIR | |
334 | ||
335 | mkdir $TESTDIR | |
336 | builtin cd $TESTDIR | |
337 | ||
bb70624e | 338 | LC_COLLATE=C # have to set this; it affects the sorting |
b72432fd JA |
339 | touch a.b a,b a:b a-b a\;b a\ b a_b |
340 | ||
341 | echo a[^[:alnum:]]b | |
342 | echo a[-.,:\;\ _]b | |
343 | ||
344 | echo a@([^[:alnum:]])b | |
345 | echo a@([-.,:; _])b | |
346 | echo a@([.])b | |
347 | echo a@([^.])b | |
348 | echo a@([^x])b | |
349 | echo a+([^[:alnum:]])b | |
350 | ||
351 | echo a@(.|[^[:alnum:]])b | |
cce855bc JA |
352 | |
353 | builtin cd / | |
354 | rm -rf $TESTDIR | |
355 | ||
95732b49 JA |
356 | x=abcdef |
357 | recho "${x#*(a|b)cd}" | |
358 | ||
cce855bc JA |
359 | # this is for the benefit of pure coverage, so it writes the pcv file |
360 | # in the right place | |
361 | builtin cd $MYDIR | |
362 | ||
0628567a JA |
363 | ${THIS_SH} ./extglob1.sub |
364 | ||
cce855bc | 365 | exit 0 |