180 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			180 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
|   | # | ||
|  | # test the shell globbing | ||
|  | # | ||
|  | expect() | ||
|  | { | ||
|  | 	echo expect "$@" | ||
|  | } | ||
|  | 
 | ||
|  | TESTDIR=/tmp/glob-test | ||
|  | rm -rf $TESTDIR | ||
|  | mkdir $TESTDIR | ||
|  | builtin cd $TESTDIR | ||
|  | 
 | ||
|  | touch a b c d abc abd abe bb bcd ca cb dd de | ||
|  | mkdir bdir | ||
|  | 
 | ||
|  | # see if `regular' globbing works right | ||
|  | expect '<a> <abc> <abd> <abe> <X*>' | ||
|  | recho a* X* | ||
|  | 
 | ||
|  | expect '<a> <abc> <abd> <abe>' | ||
|  | recho \a* | ||
|  | 
 | ||
|  | # see if null glob expansion works | ||
|  | allow_null_glob_expansion= | ||
|  | 
 | ||
|  | expect '<a> <abc> <abd> <abe>' | ||
|  | recho a* X* | ||
|  | 
 | ||
|  | unset allow_null_glob_expansion | ||
|  | 
 | ||
|  | # see if the code that expands directories only works | ||
|  | expect '<bdir/>' | ||
|  | recho b*/ | ||
|  | 
 | ||
|  | # Test quoted and unquoted globbing characters | ||
|  | expect '<*>' | ||
|  | recho \* | ||
|  | 
 | ||
|  | expect '<a*>' | ||
|  | recho 'a*' | ||
|  | 
 | ||
|  | expect '<a*>' | ||
|  | recho a\* | ||
|  | 
 | ||
|  | expect '<c> <ca> <cb> <a*> <*q*>' | ||
|  | recho c* a\* *q* | ||
|  | 
 | ||
|  | expect '<**>' | ||
|  | recho "*"* | ||
|  | 
 | ||
|  | expect '<**>' | ||
|  | recho \** | ||
|  | 
 | ||
|  | expect '<\.\./*/>' | ||
|  | recho "\.\./*/" | ||
|  | 
 | ||
|  | expect '<s/\..*//>' | ||
|  | recho 's/\..*//' | ||
|  | 
 | ||
|  | # Pattern from Larry Wall's Configure that caused bash to blow up | ||
|  | expect '</^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/>' | ||
|  | recho "/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*"'$'"/\1/" | ||
|  | 
 | ||
|  | # Make sure character classes work properly | ||
|  | 
 | ||
|  | expect '<abc> <abd> <abe> <bb> <cb>' | ||
|  | recho [a-c]b* | ||
|  | 
 | ||
|  | expect '<abd> <abe> <bb> <bcd> <bdir> <ca> <cb> <dd> <de>' | ||
|  | recho [a-y]*[^c] | ||
|  | 
 | ||
|  | expect '<abd> <abe>' | ||
|  | recho a*[^c] | ||
|  | 
 | ||
|  | touch a-b aXb | ||
|  | expect '<a-b> <aXb>' | ||
|  | recho a[X-]b | ||
|  | 
 | ||
|  | touch .x .y | ||
|  | expect '<d> <dd> <de>' | ||
|  | recho [^a-c]* | ||
|  | 
 | ||
|  | # Make sure that filenames with embedded globbing characters are handled | ||
|  | # properly | ||
|  | mkdir a\*b | ||
|  | > a\*b/ooo | ||
|  | 
 | ||
|  | expect '<a*b/ooo>' | ||
|  | recho a\*b/* | ||
|  | 
 | ||
|  | expect '<a*b/ooo>' | ||
|  | recho a\*?/* | ||
|  | 
 | ||
|  | expect '<no match>' | ||
|  | cmd='echo !7' | ||
|  | case "$cmd" in | ||
|  | *\\!*) echo match ;; | ||
|  | *) echo no match ;; | ||
|  | esac | ||
|  | 
 | ||
|  | expect '<not there>' | ||
|  | file='r.*' | ||
|  | case $file in | ||
|  | *.\*) echo not there ;; | ||
|  | *) echo there ;; | ||
|  | esac | ||
|  | 
 | ||
|  | # examples from the Posix.2 spec (d11.2, p. 243) | ||
|  | expect '<abc>' | ||
|  | recho a[b]c | ||
|  | 
 | ||
|  | expect '<abc>' | ||
|  | recho a["b"]c | ||
|  | 
 | ||
|  | expect '<abc>' | ||
|  | recho a[\b]c | ||
|  | 
 | ||
|  | expect '<abc>' | ||
|  | recho a?c | ||
|  | 
 | ||
|  | expect '<match>' | ||
|  | case abc in | ||
|  | a"b"c)	echo match | ||
|  | 	;; | ||
|  | *)	echo BAD | ||
|  | 	;; | ||
|  | esac | ||
|  | 
 | ||
|  | expect '<match>' | ||
|  | case abc in | ||
|  | a*c)	echo match | ||
|  | 	;; | ||
|  | *)	echo BAD | ||
|  | 	;; | ||
|  | esac | ||
|  | 
 | ||
|  | expect '<ok>' | ||
|  | case abc in | ||
|  | "a?c")	echo bad | ||
|  | 	;; | ||
|  | *)	echo ok | ||
|  | 	;; | ||
|  | esac | ||
|  | 
 | ||
|  | expect '<ok>' | ||
|  | case abc in | ||
|  | a\*c)	echo bad | ||
|  | 	;; | ||
|  | *)	echo ok | ||
|  | 	;; | ||
|  | esac | ||
|  | 
 | ||
|  | expect '<ok>' | ||
|  | case abc in | ||
|  | a\[b]c)	echo bad | ||
|  | 	;; | ||
|  | *)	echo ok | ||
|  | 	;; | ||
|  | esac | ||
|  | 
 | ||
|  | expect '<ok>' | ||
|  | case "$nosuchvar" in | ||
|  | "") 	echo ok ;; | ||
|  | *)	echo bad ;; | ||
|  | esac | ||
|  | 
 | ||
|  | # This is very odd, but sh and ksh seem to agree | ||
|  | expect '<ok>' | ||
|  | case abc in | ||
|  | a["\b"]c) echo ok | ||
|  | 	;; | ||
|  | *)	echo bad | ||
|  | 	;; | ||
|  | esac | ||
|  | 
 | ||
|  | builtin cd / | ||
|  | rm -rf $TESTDIR | ||
|  | exit 0 |