286 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			286 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # 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
 | |
| 
 | |
| TESTDIR=/tmp/eglob-test
 | |
| 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"}
 | |
| 
 | |
| # clean up and exit
 | |
| 
 | |
| builtin cd /
 | |
| rm -rf $TESTDIR
 | |
| 
 | |
| # this is for the benefit of pure coverage, so it writes the pcv file
 | |
| # in the right place
 | |
| builtin cd $MYDIR
 | |
| 
 | |
| exit 0
 | 
