| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | # test the ksh-like extended globbing features: [!@*?+](patlist) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | shopt -s extglob | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	echo expect "$@" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "/dev/udp/129.22.8.102/45" in | 
					
						
							|  |  |  | /dev/@(tcp|udp)/*/*)	echo ok 1;; | 
					
						
							|  |  |  | *)		echo bad 1;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # valid numbers | 
					
						
							|  |  |  | case 12 in | 
					
						
							|  |  |  | 0|[1-9]*([0-9]))	echo ok 2;; | 
					
						
							|  |  |  | *)			echo bad 2;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case 12abc in | 
					
						
							|  |  |  | 0|[1-9]*([0-9]))	echo bad 3;; | 
					
						
							|  |  |  | *)			echo ok 3;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case 1 in | 
					
						
							|  |  |  | 0|[1-9]*([0-9]))	echo ok 4;; | 
					
						
							|  |  |  | *)			echo bad 4;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # octal numbers | 
					
						
							|  |  |  | case 07 in | 
					
						
							|  |  |  | +([0-7]))		echo ok 5;; | 
					
						
							|  |  |  | *)			echo bad 5;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case 0377 in | 
					
						
							|  |  |  | +([0-7]))		echo ok 6;; | 
					
						
							|  |  |  | *)			echo bad 6;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case 09 in | 
					
						
							|  |  |  | +([0-7]))		echo bad 7;; | 
					
						
							|  |  |  | *)			echo ok 7;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # stuff from korn's book | 
					
						
							|  |  |  | case paragraph in | 
					
						
							|  |  |  | para@(chute|graph))	echo ok 8;; | 
					
						
							|  |  |  | *)			echo bad 8;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case paramour in | 
					
						
							|  |  |  | para@(chute|graph))	echo bad 9;; | 
					
						
							|  |  |  | *)			echo ok 9;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case para991 in | 
					
						
							|  |  |  | para?([345]|99)1)	echo ok 10;; | 
					
						
							|  |  |  | *)			echo bad 10;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case para381 in | 
					
						
							|  |  |  | para?([345]|99)1)	echo bad 11;; | 
					
						
							|  |  |  | *)			echo ok 11;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case paragraph in | 
					
						
							|  |  |  | para*([0-9]))		echo bad 12;; | 
					
						
							|  |  |  | *)			echo ok 12;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case para in | 
					
						
							|  |  |  | para*([0-9]))		echo ok 13;; | 
					
						
							|  |  |  | *)			echo bad 13;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case para13829383746592 in | 
					
						
							|  |  |  | para*([0-9]))		echo ok 14;; | 
					
						
							|  |  |  | *)			echo bad 14;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case paragraph in | 
					
						
							|  |  |  | para*([0-9]))		echo bad 15;; | 
					
						
							|  |  |  | *)			echo ok 15;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case para in | 
					
						
							|  |  |  | para+([0-9]))		echo bad 16;; | 
					
						
							|  |  |  | *)			echo ok 16;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case para987346523 in | 
					
						
							|  |  |  | para+([0-9]))		echo ok 17;; | 
					
						
							|  |  |  | *)			echo bad 17;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case paragraph in | 
					
						
							|  |  |  | para!(*.[0-9]))		echo ok 18;; | 
					
						
							|  |  |  | *)			echo bad 18;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case para.38 in | 
					
						
							|  |  |  | para!(*.[0-9]))		echo ok 19;; | 
					
						
							|  |  |  | *)			echo bad 19;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case para.graph in | 
					
						
							|  |  |  | para!(*.[0-9]))		echo ok 20;; | 
					
						
							|  |  |  | *)			echo bad 20;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case para39 in | 
					
						
							|  |  |  | para!(*.[0-9]))		echo ok 21;; | 
					
						
							|  |  |  | *)			echo bad 21;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests derived from those in rosenblatt's korn shell book | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "" in | 
					
						
							|  |  |  | *(0|1|3|5|7|9))		echo ok 22;; | 
					
						
							|  |  |  | *)			echo bad 22; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case 137577991 in | 
					
						
							|  |  |  | *(0|1|3|5|7|9))		echo ok 23;; | 
					
						
							|  |  |  | *)			echo bad 23; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case 2468 in | 
					
						
							|  |  |  | *(0|1|3|5|7|9))		echo bad 24;; | 
					
						
							|  |  |  | *)			echo ok 24; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case file.c in | 
					
						
							|  |  |  | *.c?(c))		echo ok 25;; | 
					
						
							|  |  |  | *)			echo bad 25;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case file.C in | 
					
						
							|  |  |  | *.c?(c))		echo bad 26;; | 
					
						
							|  |  |  | *)			echo ok 26;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case file.cc in | 
					
						
							|  |  |  | *.c?(c))		echo ok 27;; | 
					
						
							|  |  |  | *)			echo bad 27;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case file.ccc in | 
					
						
							|  |  |  | *.c?(c))		echo bad 28;; | 
					
						
							|  |  |  | *)			echo ok 28;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case parse.y in | 
					
						
							|  |  |  | !(*.c|*.h|Makefile.in|config*|README))	echo ok 29;; | 
					
						
							|  |  |  | *)			echo bad 29;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case shell.c in | 
					
						
							|  |  |  | !(*.c|*.h|Makefile.in|config*|README))	echo bad 30;; | 
					
						
							|  |  |  | *)			echo ok 30;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case Makefile in | 
					
						
							|  |  |  | !(*.c|*.h|Makefile.in|config*|README))	echo ok 31;; | 
					
						
							|  |  |  | *)			echo bad 31;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "VMS.FILE;1" in | 
					
						
							|  |  |  | *\;[1-9]*([0-9]))	echo ok 32;; | 
					
						
							|  |  |  | *)			echo bad 32;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case "VMS.FILE;0" in | 
					
						
							|  |  |  | *\;[1-9]*([0-9]))	echo bad 33;; | 
					
						
							|  |  |  | *)			echo ok 33;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | case "VMS.FILE;" in | 
					
						
							|  |  |  | *\;[1-9]*([0-9]))	echo bad 34;; | 
					
						
							|  |  |  | *)			echo ok 34;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | case "VMS.FILE;139" in | 
					
						
							|  |  |  | *\;[1-9]*([0-9]))	echo ok 35;; | 
					
						
							|  |  |  | *)			echo bad 35;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | case "VMS.FILE;1N" in | 
					
						
							|  |  |  | *\;[1-9]*([0-9]))	echo bad 36;; | 
					
						
							|  |  |  | *)			echo ok 36;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # tests derived from the pd-ksh test suite | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MYDIR=$PWD      # save where we are | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-21 20:51:19 -05:00
										 |  |  | : ${TMPDIR:=/var/tmp} | 
					
						
							|  |  |  | TESTDIR=$TMPDIR/eglob-test-$$ | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | mkdir $TESTDIR | 
					
						
							|  |  |  | builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; } | 
					
						
							|  |  |  | rm -rf * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | touch abcx abcz bbc | 
					
						
							|  |  |  | expect '!([*)*' | 
					
						
							|  |  |  | echo !([*)* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '+(a|b[)*' | 
					
						
							|  |  |  | echo +(a|b[)* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '[a*(]*z' | 
					
						
							|  |  |  | echo [a*(]*)z | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rm -f abcx abcz bbc | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | touch abc | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '+()c' | 
					
						
							|  |  |  | echo +()c | 
					
						
							|  |  |  | expect '+()x' | 
					
						
							|  |  |  | echo +()x | 
					
						
							|  |  |  | expect abc | 
					
						
							|  |  |  | echo +(*)c | 
					
						
							|  |  |  | expect '+(*)x' | 
					
						
							|  |  |  | echo +(*)x | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # extended globbing should not be performed on the output of substitutions | 
					
						
							|  |  |  | x='@(*)' | 
					
						
							|  |  |  | expect '@(*)' | 
					
						
							|  |  |  | echo $x | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect 'no-file+(a|b)stuff' | 
					
						
							|  |  |  | echo no-file+(a|b)stuff | 
					
						
							|  |  |  | expect 'no-file+(a*(c)|b)stuff' | 
					
						
							|  |  |  | echo no-file+(a*(c)|b)stuff | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | touch abd acd | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect 'abd acd' | 
					
						
							|  |  |  | echo a+(b|c)d | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect 'acd' | 
					
						
							|  |  |  | echo a!(@(b|B))d | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect 'abd' | 
					
						
							|  |  |  | echo a[b*(foo|bar)]d | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # simple kleene star tests | 
					
						
							|  |  |  | expect no | 
					
						
							|  |  |  | case foo in *(a|b[)) echo yes;; *) echo no;; esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect yes | 
					
						
							|  |  |  | case foo in *(a|b[)|f*) echo yes;; *) echo no;; esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # this doesn't work right yet; it is an incorrectly formed pattern | 
					
						
							|  |  |  | expect yes | 
					
						
							|  |  |  | case '*(a|b[)' in *(a|b[)) echo yes;; *) echo no;; esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # check extended globbing in pattern removal -- these don't work right yet | 
					
						
							|  |  |  | x=abcdef | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '1: bcdef' | 
					
						
							|  |  |  | echo 1: ${x#+(a|abc)} | 
					
						
							|  |  |  | expect '2: def' | 
					
						
							|  |  |  | echo 2: ${x##+(a|abc)} | 
					
						
							|  |  |  | expect '3: abcde' | 
					
						
							|  |  |  | echo 3: ${x%+(def|f)} | 
					
						
							|  |  |  | expect '4: abc' | 
					
						
							|  |  |  | echo 4: ${x%%+(f|def)} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # these work ok | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect '5: ef' | 
					
						
							|  |  |  | echo 5: ${x#*(a|b)cd} | 
					
						
							|  |  |  | expect '6: ef' | 
					
						
							|  |  |  | echo 6: "${x#*(a|b)cd}" | 
					
						
							|  |  |  | expect '7: abcdef' | 
					
						
							|  |  |  | echo 7: ${x#"*(a|b)cd"} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  | # More tests derived from a bug report concerning extended glob patterns | 
					
						
							|  |  |  | # following a * | 
					
						
							|  |  |  | builtin cd $TESTDIR || { echo $0: cannot cd to $TESTDIR >&2 ; exit 1; } | 
					
						
							|  |  |  | rm -rf * | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | touch ab abcdef abef abcfef | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect 'ab abef' | 
					
						
							|  |  |  | echo ab*(e|f) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect 'abcfef abef' | 
					
						
							|  |  |  | echo ab?*(e|f) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect abcdef | 
					
						
							|  |  |  | echo ab*d+(e|f) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect 'ab abcdef abcfef abef' | 
					
						
							|  |  |  | echo ab**(e|f) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | expect 'abcdef abcfef abef' | 
					
						
							|  |  |  | echo ab*+(e|f) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case 'abcfefg' in | 
					
						
							|  |  |  | ab**(e|f))	echo ok 37;; | 
					
						
							|  |  |  | *)		echo bad 37;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case 'abcfefg' in | 
					
						
							|  |  |  | ab**(e|f)g)	echo ok 38;; | 
					
						
							|  |  |  | *a)		echo bad 38;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case ab in | 
					
						
							|  |  |  | ab*+(e|f))	echo bad 39;; | 
					
						
							|  |  |  | *)		echo ok 39;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case abef in | 
					
						
							|  |  |  | ab***ef)	echo ok 40;; | 
					
						
							|  |  |  | *)		echo bad 40;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | case abef in | 
					
						
							|  |  |  | ab**)		echo ok 41;; | 
					
						
							|  |  |  | *)		echo bad 41;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-27 13:29:18 +00:00
										 |  |  | # bug in all versions up to and including bash-2.05b | 
					
						
							|  |  |  | case "123abc" in | 
					
						
							|  |  |  | *?(a)bc)	echo ok 42;; | 
					
						
							|  |  |  | *)		echo bad 42;; | 
					
						
							|  |  |  | esac | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  | # clean up and do the next one | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | builtin cd / | 
					
						
							|  |  |  | rm -rf $TESTDIR | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mkdir $TESTDIR | 
					
						
							|  |  |  | builtin cd $TESTDIR | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-03-17 21:46:59 +00:00
										 |  |  | LC_COLLATE=C # have to set this; it affects the sorting  | 
					
						
							| 
									
										
										
										
											1999-02-19 17:11:39 +00:00
										 |  |  | touch a.b a,b a:b a-b a\;b a\ b a_b | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo a[^[:alnum:]]b | 
					
						
							|  |  |  | echo a[-.,:\;\ _]b | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo a@([^[:alnum:]])b | 
					
						
							|  |  |  | echo a@([-.,:; _])b | 
					
						
							|  |  |  | echo a@([.])b | 
					
						
							|  |  |  | echo a@([^.])b | 
					
						
							|  |  |  | echo a@([^x])b | 
					
						
							|  |  |  | echo a+([^[:alnum:]])b | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo a@(.|[^[:alnum:]])b | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | builtin cd / | 
					
						
							|  |  |  | rm -rf $TESTDIR | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-12-07 14:08:12 +00:00
										 |  |  | x=abcdef | 
					
						
							|  |  |  | recho "${x#*(a|b)cd}" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-12 13:36:28 +00:00
										 |  |  | TEST='a , b' | 
					
						
							|  |  |  | shopt -s globstar | 
					
						
							|  |  |  | echo ${TEST//*([[:space:]]),*([[:space:]])/,} | 
					
						
							|  |  |  | shopt -u globstar | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | # this is for the benefit of pure coverage, so it writes the pcv file | 
					
						
							|  |  |  | # in the right place | 
					
						
							| 
									
										
										
										
											2009-01-12 13:36:28 +00:00
										 |  |  | builtin cd "$MYDIR" | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-10 14:15:34 +00:00
										 |  |  | ${THIS_SH} ./extglob1.sub | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | exit 0 |