1 # test the ksh-like extended globbing features: [!@*?+](patlist)
10 case "/dev/udp/129.22.8.102/45" in
11 /dev/@(tcp|udp)/*/*) echo ok 1;;
17 0|[1-9]*([0-9])) echo ok 2;;
22 0|[1-9]*([0-9])) echo bad 3;;
27 0|[1-9]*([0-9])) echo ok 4;;
43 +([0-7])) echo bad 7;;
47 # stuff from korn's book
49 para@(chute|graph)) echo ok 8;;
54 para@(chute|graph)) echo bad 9;;
59 para?([345]|99)1) echo ok 10;;
64 para?([345]|99)1) echo bad 11;;
69 para*([0-9])) echo bad 12;;
74 para*([0-9])) echo ok 13;;
78 case para13829383746592 in
79 para*([0-9])) echo ok 14;;
84 para*([0-9])) echo bad 15;;
89 para+([0-9])) echo bad 16;;
94 para+([0-9])) echo ok 17;;
99 para!(*.[0-9])) echo ok 18;;
104 para!(*.[0-9])) echo ok 19;;
109 para!(*.[0-9])) echo ok 20;;
114 para!(*.[0-9])) echo ok 21;;
118 # tests derived from those in rosenblatt's korn shell book
121 *(0|1|3|5|7|9)) echo ok 22;;
126 *(0|1|3|5|7|9)) echo ok 23;;
131 *(0|1|3|5|7|9)) echo bad 24;;
136 *.c?(c)) echo ok 25;;
141 *.c?(c)) echo bad 26;;
146 *.c?(c)) echo ok 27;;
151 *.c?(c)) echo bad 28;;
156 !(*.c|*.h|Makefile.in|config*|README)) echo ok 29;;
161 !(*.c|*.h|Makefile.in|config*|README)) echo bad 30;;
166 !(*.c|*.h|Makefile.in|config*|README)) echo ok 31;;
171 *\;[1-9]*([0-9])) echo ok 32;;
176 *\;[1-9]*([0-9])) echo bad 33;;
180 *\;[1-9]*([0-9])) echo bad 34;;
183 case "VMS.FILE;139" in
184 *\;[1-9]*([0-9])) echo ok 35;;
187 case "VMS.FILE;1N" in
188 *\;[1-9]*([0-9])) echo bad 36;;
192 # tests derived from the pd-ksh test suite
194 MYDIR=$PWD # save where we are
196 : ${TMPDIR:=/var/tmp}
197 TESTDIR=$TMPDIR/eglob-test-$$
199 builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; }
225 # extended globbing should not be performed on the output of substitutions
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
246 # simple kleene star tests
248 case foo in *(a|b[)) echo yes;; *) echo no;; esac
251 case foo in *(a|b[)|f*) echo yes;; *) echo no;; esac
253 # this doesn't work right yet; it is an incorrectly formed pattern
255 case '*(a|b[)' in *(a|b[)) echo yes;; *) echo no;; esac
257 # check extended globbing in pattern removal -- these don't work right yet
261 echo 1: ${x#+(a|abc)}
263 echo 2: ${x##+(a|abc)}
265 echo 3: ${x%+(def|f)}
267 echo 4: ${x%%+(f|def)}
272 echo 5: ${x#*(a|b)cd}
274 echo 6: "${x#*(a|b)cd}"
276 echo 7: ${x#"*(a|b)cd"}
278 # More tests derived from a bug report concerning extended glob patterns
280 builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; }
283 touch ab abcdef abef abcfef
294 expect 'ab abcdef abcfef abef'
297 expect 'abcdef abcfef abef'
301 ab**(e|f)) echo ok 37;;
306 ab**(e|f)g) echo ok 38;;
311 ab*+(e|f)) echo bad 39;;
316 ab***ef) echo ok 40;;
325 # bug in all versions up to and including bash-2.05b
327 *?(a)bc) echo ok 42;;
331 # clean up and do the next one
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
345 echo a@([^[:alnum:]])b
350 echo a+([^[:alnum:]])b
352 echo a@(.|[^[:alnum:]])b
358 recho "${x#*(a|b)cd}"
362 echo ${TEST//*([[:space:]]),*([[:space:]])/,}
365 # this is for the benefit of pure coverage, so it writes the pcv file
369 ${THIS_SH} ./extglob1.sub
371 ${THIS_SH} ./extglob1a.sub