14887Schin######################################################################## 24887Schin# # 34887Schin# This software is part of the ast package # 4*8462SApril.Chin@Sun.COM# Copyright (c) 1982-2008 AT&T Intellectual Property # 54887Schin# and is licensed under the # 64887Schin# Common Public License, Version 1.0 # 7*8462SApril.Chin@Sun.COM# by AT&T Intellectual Property # 84887Schin# # 94887Schin# A copy of the License is available at # 104887Schin# http://www.opensource.org/licenses/cpl1.0.txt # 114887Schin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) # 124887Schin# # 134887Schin# Information and Software Systems Research # 144887Schin# AT&T Research # 154887Schin# Florham Park NJ # 164887Schin# # 174887Schin# David Korn <dgk@research.att.com> # 184887Schin# # 194887Schin######################################################################## 204887Schinfunction err_exit 214887Schin{ 22*8462SApril.Chin@Sun.COM print -u2 -r $'\t'"${Command}[$1] ${@:2}" 234887Schin ((errors++)) 244887Schin} 254887Schinalias err_exit='err_exit $LINENO' 264887Schin 274887Schininteger aware=0 contrary=0 ignorant=0 284887Schin 294887Schinfunction test_glob 304887Schin{ 314887Schin typeset lineno expected drop arg got sep op val add del 32*8462SApril.Chin@Sun.COM lineno=$1 33*8462SApril.Chin@Sun.COM shift 344887Schin if [[ $1 == --* ]] 354887Schin then del=${1#--} 364887Schin shift 374887Schin fi 384887Schin if [[ $1 == ++* ]] 394887Schin then add=${1#++} 404887Schin shift 414887Schin fi 42*8462SApril.Chin@Sun.COM expected=$1 43*8462SApril.Chin@Sun.COM shift 444887Schin if (( contrary )) 454887Schin then if [[ $expected == "<Beware> "* ]] 464887Schin then expected=${expected#"<Beware> "} 474887Schin expected="$expected <Beware>" 484887Schin fi 494887Schin if [[ $expected == *"<aXb> <abd>"* ]] 504887Schin then expected=${expected/"<aXb> <abd>"/"<abd> <aXb>"} 514887Schin fi 524887Schin fi 534887Schin for arg 544887Schin do got="$got$sep<$arg>" 554887Schin sep=" " 564887Schin done 574887Schin if (( ignorant && aware )) 584887Schin then if [[ $del ]] 594887Schin then got="<$del> $got" 604887Schin fi 614887Schin if [[ $add ]] 624887Schin then expected="<$add> $expected" 634887Schin fi 644887Schin fi 654887Schin if [[ $got != "$expected" ]] 66*8462SApril.Chin@Sun.COM then 'err_exit' $lineno "glob -- expected '$expected', got '$got'" 674887Schin fi 684887Schin} 69*8462SApril.Chin@Sun.COMalias test_glob='test_glob $LINENO' 704887Schin 714887Schinfunction test_case 724887Schin{ 734887Schin typeset lineno expected subject pattern got 744887Schin lineno=$1 expected=$2 subject=$3 pattern=$4 754887Schin eval " 764887Schin case $subject in 774887Schin $pattern) got='<match>' ;; 784887Schin *) got='<nomatch>' ;; 794887Schin esac 804887Schin " 814887Schin if [[ $got != "$expected" ]] 82*8462SApril.Chin@Sun.COM then 'err_exit' $lineno "case $subject in $pattern) -- expected '$expected', got '$got'" 834887Schin fi 844887Schin} 85*8462SApril.Chin@Sun.COMalias test_case='test_case $LINENO' 864887Schin 874887SchinCommand=${0##*/} 884887Schintmp=/tmp/ksh$$ 894887Schininteger errors=0 904887Schinunset undefined 914887Schin 924887Schinexport LC_COLLATE=C 934887Schin 94*8462SApril.Chin@Sun.COMmkdir $tmp || err_exit "mkdir $tmp failed" 954887Schintrap "cd /; rm -rf $tmp" EXIT 96*8462SApril.Chin@Sun.COMcd $tmp || err_exit "cd $tmp failed" 974887Schinrm -rf * 984887Schin 994887Schintouch B b 1004887Schinset -- * 1014887Schincase $* in 1024887Schin'b B') contrary=1 ;; 1034887Schinb|B) ignorant=1 ;; 1044887Schinesac 1054887Schinset -- $(/bin/sh -c 'echo [a-c]') 1064887Schincase $* in 1074887SchinB) aware=1 ;; 1084887Schinesac 1094887Schinrm -rf * 1104887Schin 1114887Schintouch a b c d abc abd abe bb bcd ca cb dd de Beware 1124887Schinmkdir bdir 1134887Schin 114*8462SApril.Chin@Sun.COMtest_glob '<a> <abc> <abd> <abe> <X*>' a* X* 115*8462SApril.Chin@Sun.COMtest_glob '<a> <abc> <abd> <abe>' \a* 1164887Schin 1174887Schinif ( set --nullglob ) 2>/dev/null 1184887Schinthen 1194887Schin set --nullglob 1204887Schin 121*8462SApril.Chin@Sun.COM test_glob '<a> <abc> <abd> <abe>' a* X* 1224887Schin 1234887Schin set --nonullglob 1244887Schinfi 1254887Schin 1264887Schinif ( set --failglob ) 2>/dev/null 1274887Schinthen 1284887Schin set --failglob 1294887Schin mkdir tmp 1304887Schin touch tmp/l1 tmp/l2 tmp/l3 1314887Schin 132*8462SApril.Chin@Sun.COM test_glob '' tmp/l[12] tmp/*4 tmp/*3 133*8462SApril.Chin@Sun.COM test_glob '' tmp/l[12] tmp/*4 tmp/*3 1344887Schin 1354887Schin rm -r tmp 1364887Schin set --nofailglob 1374887Schinfi 1384887Schin 139*8462SApril.Chin@Sun.COMtest_glob '<bdir/>' b*/ 140*8462SApril.Chin@Sun.COMtest_glob '<*>' \* 141*8462SApril.Chin@Sun.COMtest_glob '<a*>' 'a*' 142*8462SApril.Chin@Sun.COMtest_glob '<a*>' a\* 143*8462SApril.Chin@Sun.COMtest_glob '<c> <ca> <cb> <a*> <*q*>' c* a\* *q* 144*8462SApril.Chin@Sun.COMtest_glob '<**>' "*"* 145*8462SApril.Chin@Sun.COMtest_glob '<**>' \** 146*8462SApril.Chin@Sun.COMtest_glob '<\.\./*/>' "\.\./*/" 147*8462SApril.Chin@Sun.COMtest_glob '<s/\..*//>' 's/\..*//' 148*8462SApril.Chin@Sun.COMtest_glob '</^root:/{s/^[!:]*:[!:]*:\([!:]*\).*$/\1/>' "/^root:/{s/^[!:]*:[!:]*:\([!:]*\).*"'$'"/\1/" 149*8462SApril.Chin@Sun.COMtest_glob '<abc> <abd> <abe> <bb> <cb>' [a-c]b* 150*8462SApril.Chin@Sun.COMtest_glob ++Beware '<abd> <abe> <bb> <bcd> <bdir> <ca> <cb> <dd> <de>' [a-y]*[!c] 151*8462SApril.Chin@Sun.COMtest_glob '<abd> <abe>' a*[!c] 1524887Schin 1534887Schintouch a-b aXb 1544887Schin 155*8462SApril.Chin@Sun.COMtest_glob '<a-b> <aXb>' a[X-]b 1564887Schin 1574887Schintouch .x .y 1584887Schin 159*8462SApril.Chin@Sun.COMtest_glob --Beware '<Beware> <d> <dd> <de>' [!a-c]* 1604887Schin 1614887Schinif mkdir a\*b 2>/dev/null 1624887Schinthen 1634887Schin touch a\*b/ooo 1644887Schin 165*8462SApril.Chin@Sun.COM test_glob '<a*b/ooo>' a\*b/* 166*8462SApril.Chin@Sun.COM test_glob '<a*b/ooo>' a\*?/* 167*8462SApril.Chin@Sun.COM test_case '<match>' '!7' '*\!*' 168*8462SApril.Chin@Sun.COM test_case '<match>' 'r.*' '*.\*' 169*8462SApril.Chin@Sun.COM test_glob '<abc>' a[b]c 170*8462SApril.Chin@Sun.COM test_glob '<abc>' a["b"]c 171*8462SApril.Chin@Sun.COM test_glob '<abc>' a[\b]c 172*8462SApril.Chin@Sun.COM test_glob '<abc>' a?c 173*8462SApril.Chin@Sun.COM test_case '<match>' 'abc' 'a"b"c' 174*8462SApril.Chin@Sun.COM test_case '<match>' 'abc' 'a*c' 175*8462SApril.Chin@Sun.COM test_case '<nomatch>' 'abc' '"a?c"' 176*8462SApril.Chin@Sun.COM test_case '<nomatch>' 'abc' 'a\*c' 177*8462SApril.Chin@Sun.COM test_case '<nomatch>' 'abc' 'a\[b]c' 178*8462SApril.Chin@Sun.COM test_case '<match>' '"$undefined"' '""' 179*8462SApril.Chin@Sun.COM test_case '<match>' 'abc' 'a["\b"]c' 1804887Schin 1814887Schin rm -rf mkdir a\*b 1824887Schinfi 1834887Schin 1844887Schinmkdir man 1854887Schinmkdir man/man1 1864887Schintouch man/man1/sh.1 1874887Schin 188*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' */man*/sh.* 189*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' $(echo */man*/sh.*) 190*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' "$(echo */man*/sh.*)" 1914887Schin 192*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' 'a***c' 193*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' 'a*****?c' 194*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?*****??' 195*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*****??' 196*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*****??c' 197*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?*****?c' 198*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?***?****c' 199*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?***?****?' 200*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?***?****' 201*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*******c' 202*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*******?' 203*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a*cd**?**??k' 204*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k' 205*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k***' 206*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k' 207*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k**' 208*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a****c**?**??*****' 209*8462SApril.Chin@Sun.COMtest_case '<match>' "'-'" '[-abc]' 210*8462SApril.Chin@Sun.COMtest_case '<match>' "'-'" '[abc-]' 211*8462SApril.Chin@Sun.COMtest_case '<match>' "'\\'" '\\' 212*8462SApril.Chin@Sun.COMtest_case '<match>' "'\\'" '[\\]' 213*8462SApril.Chin@Sun.COMtest_case '<match>' "'\\'" "'\\'" 214*8462SApril.Chin@Sun.COMtest_case '<match>' "'['" '[[]' 215*8462SApril.Chin@Sun.COMtest_case '<match>' '[' '[[]' 216*8462SApril.Chin@Sun.COMtest_case '<match>' "'['" '[' 217*8462SApril.Chin@Sun.COMtest_case '<match>' '[' '[' 218*8462SApril.Chin@Sun.COMtest_case '<match>' "'[abc'" "'['*" 219*8462SApril.Chin@Sun.COMtest_case '<nomatch>' "'[abc'" '[*' 220*8462SApril.Chin@Sun.COMtest_case '<match>' '[abc' "'['*" 221*8462SApril.Chin@Sun.COMtest_case '<nomatch>' '[abc' '[*' 222*8462SApril.Chin@Sun.COMtest_case '<match>' 'abd' "a[b/c]d" 223*8462SApril.Chin@Sun.COMtest_case '<match>' 'a/d' "a[b/c]d" 224*8462SApril.Chin@Sun.COMtest_case '<match>' 'acd' "a[b/c]d" 225*8462SApril.Chin@Sun.COMtest_case '<match>' "']'" '[]]' 226*8462SApril.Chin@Sun.COMtest_case '<match>' "'-'" '[]-]' 227*8462SApril.Chin@Sun.COMtest_case '<match>' 'p' '[a-\z]' 228*8462SApril.Chin@Sun.COMtest_case '<match>' '"/tmp"' '[/\\]*' 229*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '??**********?****?' 230*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '??**********?****c' 231*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '?************c****?****' 232*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '*c*?**' 233*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' 'a*****c*?**' 234*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' 'a********???*******' 235*8462SApril.Chin@Sun.COMtest_case '<nomatch>' "'a'" '[]' 236*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'a' '[]' 237*8462SApril.Chin@Sun.COMtest_case '<nomatch>' "'['" '[abc' 238*8462SApril.Chin@Sun.COMtest_case '<nomatch>' '[' '[abc' 2394887Schin 240*8462SApril.Chin@Sun.COMtest_glob ++Beware '<b> <bb> <bcd> <bdir>' b* 241*8462SApril.Chin@Sun.COMtest_glob '<Beware> <b> <bb> <bcd> <bdir>' [bB]* 2424887Schin 2434887Schinif ( set --nocaseglob ) 2>/dev/null 2444887Schinthen 2454887Schin set --nocaseglob 2464887Schin 247*8462SApril.Chin@Sun.COM test_glob '<Beware> <b> <bb> <bcd> <bdir>' b* 248*8462SApril.Chin@Sun.COM test_glob '<Beware> <b> <bb> <bcd> <bdir>' [b]* 249*8462SApril.Chin@Sun.COM test_glob '<Beware> <b> <bb> <bcd> <bdir>' [bB]* 2504887Schin 2514887Schin set --nonocaseglob 2524887Schinfi 2534887Schin 2544887Schinif ( set -f ) 2>/dev/null 2554887Schinthen 2564887Schin set -f 2574887Schin 258*8462SApril.Chin@Sun.COM test_glob '<*>' * 2594887Schin 2604887Schin set +f 2614887Schinfi 2624887Schin 2634887Schinif ( set --noglob ) 2>/dev/null 2644887Schinthen 2654887Schin set --noglob 2664887Schin 267*8462SApril.Chin@Sun.COM test_glob '<*>' * 2684887Schin 2694887Schin set --glob 2704887Schinfi 2714887Schin 2724887SchinFIGNORE='.*|*' 273*8462SApril.Chin@Sun.COMtest_glob '<*>' * 2744887Schin 2754887SchinFIGNORE='.*|*c|*e|?' 276*8462SApril.Chin@Sun.COMtest_glob '<a-b> <aXb> <abd> <bb> <bcd> <bdir> <ca> <cb> <dd> <man>' * 2774887Schin 2784887SchinFIGNORE='.*|*b|*d|?' 279*8462SApril.Chin@Sun.COMtest_glob '<Beware> <abc> <abe> <bdir> <ca> <de> <man>' * 2804887Schin 2814887SchinFIGNORE= 282*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' */man*/sh.* 2834887Schin 2844887Schinunset FIGNORE 285*8462SApril.Chin@Sun.COMtest_glob '<bb> <ca> <cb> <dd> <de>' ?? 286*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' */man*/sh.* 2874887Schin 2884887SchinGLOBIGNORE='.*:*' 2894887Schinset -- * 2904887Schinif [[ $1 == '*' ]] 2914887Schinthen 2924887Schin GLOBIGNORE='.*:*c:*e:?' 293*8462SApril.Chin@Sun.COM test_glob '<>' * 2944887Schin 2954887Schin GLOBIGNORE='.*:*b:*d:?' 296*8462SApril.Chin@Sun.COM test_glob '<>' * 2974887Schin 2984887Schin unset GLOBIGNORE 299*8462SApril.Chin@Sun.COM test_glob '<>' * 300*8462SApril.Chin@Sun.COM test_glob '<man/man1/sh.1>' */man*/sh.* 3014887Schin 3024887Schin GLOBIGNORE= 303*8462SApril.Chin@Sun.COM test_glob '<man/man1/sh.1>' */man*/sh.* 3044887Schinfi 305*8462SApril.Chin@Sun.COMunset GLOBIGNORE 306*8462SApril.Chin@Sun.COM 307*8462SApril.Chin@Sun.COMfunction test_sub 308*8462SApril.Chin@Sun.COM{ 309*8462SApril.Chin@Sun.COM x='${subject'$2'}' 310*8462SApril.Chin@Sun.COM eval g=$x 311*8462SApril.Chin@Sun.COM if [[ "$g" != "$3" ]] 312*8462SApril.Chin@Sun.COM then 'err_exit' $1 subject="'$subject' $x failed, expected '$3', got '$g'" 313*8462SApril.Chin@Sun.COM fi 314*8462SApril.Chin@Sun.COM} 315*8462SApril.Chin@Sun.COMalias test_sub='test_sub $LINENO' 316*8462SApril.Chin@Sun.COM 317*8462SApril.Chin@Sun.COMset --noglob --nobraceexpand 318*8462SApril.Chin@Sun.COM 319*8462SApril.Chin@Sun.COMsubject='A regular expressions test' 320*8462SApril.Chin@Sun.COM 321*8462SApril.Chin@Sun.COMtest_sub '/e/#' 'A r#gular expressions test' 322*8462SApril.Chin@Sun.COMtest_sub '//e/#' 'A r#gular #xpr#ssions t#st' 323*8462SApril.Chin@Sun.COMtest_sub '/[^e]/#' '# regular expressions test' 324*8462SApril.Chin@Sun.COMtest_sub '//[^e]/#' '###e######e###e########e##' 325*8462SApril.Chin@Sun.COMtest_sub '/+(e)/#' 'A r#gular expressions test' 326*8462SApril.Chin@Sun.COMtest_sub '//+(e)/#' 'A r#gular #xpr#ssions t#st' 327*8462SApril.Chin@Sun.COMtest_sub '/@-(e)/#' 'A r#gular expressions test' 328*8462SApril.Chin@Sun.COMtest_sub '//@-(e)/#' 'A r#gular #xpr#ssions t#st' 329*8462SApril.Chin@Sun.COMtest_sub '/?(e)/#' '#A regular expressions test' 330*8462SApril.Chin@Sun.COMtest_sub '//?(e)/#' '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#' 331*8462SApril.Chin@Sun.COMtest_sub '/*(e)/#' '#A regular expressions test' 332*8462SApril.Chin@Sun.COMtest_sub '//*(e)/#' '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#' 333*8462SApril.Chin@Sun.COMtest_sub '//@(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 334*8462SApril.Chin@Sun.COMtest_sub '//@-(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 335*8462SApril.Chin@Sun.COMtest_sub '//+(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 336*8462SApril.Chin@Sun.COMtest_sub '//+-(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 337*8462SApril.Chin@Sun.COMtest_sub '//@(+(e))/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 338*8462SApril.Chin@Sun.COMtest_sub '//@(+-(e))/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 339*8462SApril.Chin@Sun.COMtest_sub '//-(e)/#' 'A regular expressions test' 340*8462SApril.Chin@Sun.COMtest_sub '//--(e)/#' 'A regular expressions test' 341*8462SApril.Chin@Sun.COMtest_sub '//?(e)/[\1]' '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]' 342*8462SApril.Chin@Sun.COMtest_sub '//{0,1}(e)/[\1]' '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]' 343*8462SApril.Chin@Sun.COMtest_sub '//*(e)/[\1]' '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]' 344*8462SApril.Chin@Sun.COMtest_sub '//{0,}(e)/[\1]' '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]' 345*8462SApril.Chin@Sun.COMtest_sub '//@(?(e))/[\1]' '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]' 346*8462SApril.Chin@Sun.COMtest_sub '//@({0,1}(e))/[\1]' '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]' 347*8462SApril.Chin@Sun.COMtest_sub '//@(*(e))/[\1]' '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]' 348*8462SApril.Chin@Sun.COMtest_sub '//@({0,}(e))/[\1]' '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]' 349*8462SApril.Chin@Sun.COMtest_sub '/?-(e)/#' '#A regular expressions test' 350*8462SApril.Chin@Sun.COMtest_sub '/@(?-(e))/[\1]' '[]A regular expressions test' 351*8462SApril.Chin@Sun.COMtest_sub '/!(e)/#' '#' 352*8462SApril.Chin@Sun.COMtest_sub '//!(e)/#' '#' 353*8462SApril.Chin@Sun.COMtest_sub '/@(!(e))/[\1]' '[A regular expressions test]' 354*8462SApril.Chin@Sun.COMtest_sub '//@(!(e))/[\1]' '[A regular expressions test]' 355*8462SApril.Chin@Sun.COM 356*8462SApril.Chin@Sun.COMsubject='e' 357*8462SApril.Chin@Sun.COM 358*8462SApril.Chin@Sun.COMtest_sub '/!(e)/#' '#e' 359*8462SApril.Chin@Sun.COMtest_sub '//!(e)/#' '#e#' 360*8462SApril.Chin@Sun.COMtest_sub '/!(e)/[\1]' '[]e' 361*8462SApril.Chin@Sun.COMtest_sub '//!(e)/[\1]' '[]e[]' 362*8462SApril.Chin@Sun.COMtest_sub '/@(!(e))/[\1]' '[]e' 363*8462SApril.Chin@Sun.COMtest_sub '//@(!(e))/[\1]' '[]e[]' 364*8462SApril.Chin@Sun.COM 365*8462SApril.Chin@Sun.COMsubject='a' 366*8462SApril.Chin@Sun.COM 367*8462SApril.Chin@Sun.COMtest_sub '/@(!(a))/[\1]' '[]a' 368*8462SApril.Chin@Sun.COMtest_sub '//@(!(a))/[\1]' '[]a[]' 369*8462SApril.Chin@Sun.COM 370*8462SApril.Chin@Sun.COMsubject='aha' 371*8462SApril.Chin@Sun.COM 372*8462SApril.Chin@Sun.COMtest_sub '/@(!(a))/[\1]' '[aha]' 373*8462SApril.Chin@Sun.COMtest_sub '//@(!(a))/[\1]' '[aha]' 374*8462SApril.Chin@Sun.COMtest_sub '/@(!(aha))/[\1]' '[ah]a' 375*8462SApril.Chin@Sun.COMtest_sub '//@(!(aha))/[\1]' '[ah][a]' 3764887Schin 3774887Schinexit $errors 378