14887Schin######################################################################## 24887Schin# # 34887Schin# This software is part of the ast package # 4*12068SRoger.Faulkner@Oracle.COM# Copyright (c) 1982-2010 AT&T Intellectual Property # 54887Schin# and is licensed under the # 64887Schin# Common Public License, Version 1.0 # 78462SApril.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{ 228462SApril.Chin@Sun.COM print -u2 -r $'\t'"${Command}[$1] ${@:2}" 234887Schin ((errors++)) 244887Schin} 254887Schinalias err_exit='err_exit $LINENO' 264887Schin 2710898Sroland.mainz@nrubsig.orgCommand=${0##*/} 2810898Sroland.mainz@nrubsig.orginteger aware=0 contrary=0 errors=0 ignorant=0 2910898Sroland.mainz@nrubsig.org 3010898Sroland.mainz@nrubsig.orgtmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; } 3110898Sroland.mainz@nrubsig.orgtrap "cd /; rm -rf $tmp" EXIT 324887Schin 334887Schinfunction test_glob 344887Schin{ 354887Schin typeset lineno expected drop arg got sep op val add del 368462SApril.Chin@Sun.COM lineno=$1 378462SApril.Chin@Sun.COM shift 384887Schin if [[ $1 == --* ]] 394887Schin then del=${1#--} 404887Schin shift 414887Schin fi 424887Schin if [[ $1 == ++* ]] 434887Schin then add=${1#++} 444887Schin shift 454887Schin fi 468462SApril.Chin@Sun.COM expected=$1 478462SApril.Chin@Sun.COM shift 484887Schin if (( contrary )) 494887Schin then if [[ $expected == "<Beware> "* ]] 504887Schin then expected=${expected#"<Beware> "} 514887Schin expected="$expected <Beware>" 524887Schin fi 534887Schin if [[ $expected == *"<aXb> <abd>"* ]] 544887Schin then expected=${expected/"<aXb> <abd>"/"<abd> <aXb>"} 554887Schin fi 564887Schin fi 574887Schin for arg 584887Schin do got="$got$sep<$arg>" 594887Schin sep=" " 604887Schin done 614887Schin if (( ignorant && aware )) 624887Schin then if [[ $del ]] 634887Schin then got="<$del> $got" 644887Schin fi 654887Schin if [[ $add ]] 664887Schin then expected="<$add> $expected" 674887Schin fi 684887Schin fi 694887Schin if [[ $got != "$expected" ]] 708462SApril.Chin@Sun.COM then 'err_exit' $lineno "glob -- expected '$expected', got '$got'" 714887Schin fi 724887Schin} 738462SApril.Chin@Sun.COMalias test_glob='test_glob $LINENO' 744887Schin 754887Schinfunction test_case 764887Schin{ 774887Schin typeset lineno expected subject pattern got 784887Schin lineno=$1 expected=$2 subject=$3 pattern=$4 794887Schin eval " 804887Schin case $subject in 814887Schin $pattern) got='<match>' ;; 824887Schin *) got='<nomatch>' ;; 834887Schin esac 844887Schin " 854887Schin if [[ $got != "$expected" ]] 868462SApril.Chin@Sun.COM then 'err_exit' $lineno "case $subject in $pattern) -- expected '$expected', got '$got'" 874887Schin fi 884887Schin} 898462SApril.Chin@Sun.COMalias test_case='test_case $LINENO' 904887Schin 914887Schinunset undefined 924887Schin 934887Schinexport LC_COLLATE=C 944887Schin 9510898Sroland.mainz@nrubsig.orgcd $tmp || { err_exit "cd $tmp failed"; exit 1; } 964887Schin 974887Schintouch B b 984887Schinset -- * 994887Schincase $* in 1004887Schin'b B') contrary=1 ;; 1014887Schinb|B) ignorant=1 ;; 1024887Schinesac 1034887Schinset -- $(/bin/sh -c 'echo [a-c]') 1044887Schincase $* in 1054887SchinB) aware=1 ;; 1064887Schinesac 1074887Schinrm -rf * 1084887Schin 1094887Schintouch a b c d abc abd abe bb bcd ca cb dd de Beware 1104887Schinmkdir bdir 1114887Schin 1128462SApril.Chin@Sun.COMtest_glob '<a> <abc> <abd> <abe> <X*>' a* X* 1138462SApril.Chin@Sun.COMtest_glob '<a> <abc> <abd> <abe>' \a* 1144887Schin 1154887Schinif ( set --nullglob ) 2>/dev/null 1164887Schinthen 1174887Schin set --nullglob 1184887Schin 1198462SApril.Chin@Sun.COM test_glob '<a> <abc> <abd> <abe>' a* X* 1204887Schin 1214887Schin set --nonullglob 1224887Schinfi 1234887Schin 1244887Schinif ( set --failglob ) 2>/dev/null 1254887Schinthen 1264887Schin set --failglob 1274887Schin mkdir tmp 1284887Schin touch tmp/l1 tmp/l2 tmp/l3 1294887Schin 1308462SApril.Chin@Sun.COM test_glob '' tmp/l[12] tmp/*4 tmp/*3 1318462SApril.Chin@Sun.COM test_glob '' tmp/l[12] tmp/*4 tmp/*3 1324887Schin 1334887Schin rm -r tmp 1344887Schin set --nofailglob 1354887Schinfi 1364887Schin 1378462SApril.Chin@Sun.COMtest_glob '<bdir/>' b*/ 1388462SApril.Chin@Sun.COMtest_glob '<*>' \* 1398462SApril.Chin@Sun.COMtest_glob '<a*>' 'a*' 1408462SApril.Chin@Sun.COMtest_glob '<a*>' a\* 1418462SApril.Chin@Sun.COMtest_glob '<c> <ca> <cb> <a*> <*q*>' c* a\* *q* 1428462SApril.Chin@Sun.COMtest_glob '<**>' "*"* 1438462SApril.Chin@Sun.COMtest_glob '<**>' \** 1448462SApril.Chin@Sun.COMtest_glob '<\.\./*/>' "\.\./*/" 1458462SApril.Chin@Sun.COMtest_glob '<s/\..*//>' 's/\..*//' 1468462SApril.Chin@Sun.COMtest_glob '</^root:/{s/^[!:]*:[!:]*:\([!:]*\).*$/\1/>' "/^root:/{s/^[!:]*:[!:]*:\([!:]*\).*"'$'"/\1/" 1478462SApril.Chin@Sun.COMtest_glob '<abc> <abd> <abe> <bb> <cb>' [a-c]b* 1488462SApril.Chin@Sun.COMtest_glob ++Beware '<abd> <abe> <bb> <bcd> <bdir> <ca> <cb> <dd> <de>' [a-y]*[!c] 1498462SApril.Chin@Sun.COMtest_glob '<abd> <abe>' a*[!c] 1504887Schin 1514887Schintouch a-b aXb 1524887Schin 1538462SApril.Chin@Sun.COMtest_glob '<a-b> <aXb>' a[X-]b 1544887Schin 1554887Schintouch .x .y 1564887Schin 1578462SApril.Chin@Sun.COMtest_glob --Beware '<Beware> <d> <dd> <de>' [!a-c]* 1584887Schin 1594887Schinif mkdir a\*b 2>/dev/null 1604887Schinthen 1614887Schin touch a\*b/ooo 1624887Schin 1638462SApril.Chin@Sun.COM test_glob '<a*b/ooo>' a\*b/* 1648462SApril.Chin@Sun.COM test_glob '<a*b/ooo>' a\*?/* 1658462SApril.Chin@Sun.COM test_case '<match>' '!7' '*\!*' 1668462SApril.Chin@Sun.COM test_case '<match>' 'r.*' '*.\*' 1678462SApril.Chin@Sun.COM test_glob '<abc>' a[b]c 1688462SApril.Chin@Sun.COM test_glob '<abc>' a["b"]c 1698462SApril.Chin@Sun.COM test_glob '<abc>' a[\b]c 1708462SApril.Chin@Sun.COM test_glob '<abc>' a?c 1718462SApril.Chin@Sun.COM test_case '<match>' 'abc' 'a"b"c' 1728462SApril.Chin@Sun.COM test_case '<match>' 'abc' 'a*c' 1738462SApril.Chin@Sun.COM test_case '<nomatch>' 'abc' '"a?c"' 1748462SApril.Chin@Sun.COM test_case '<nomatch>' 'abc' 'a\*c' 1758462SApril.Chin@Sun.COM test_case '<nomatch>' 'abc' 'a\[b]c' 1768462SApril.Chin@Sun.COM test_case '<match>' '"$undefined"' '""' 1778462SApril.Chin@Sun.COM test_case '<match>' 'abc' 'a["\b"]c' 1784887Schin 1794887Schin rm -rf mkdir a\*b 1804887Schinfi 1814887Schin 1824887Schinmkdir man 1834887Schinmkdir man/man1 1844887Schintouch man/man1/sh.1 1854887Schin 1868462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' */man*/sh.* 1878462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' $(echo */man*/sh.*) 1888462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' "$(echo */man*/sh.*)" 1894887Schin 1908462SApril.Chin@Sun.COMtest_case '<match>' 'abc' 'a***c' 1918462SApril.Chin@Sun.COMtest_case '<match>' 'abc' 'a*****?c' 1928462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?*****??' 1938462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*****??' 1948462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*****??c' 1958462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?*****?c' 1968462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?***?****c' 1978462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?***?****?' 1988462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?***?****' 1998462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*******c' 2008462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*******?' 2018462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a*cd**?**??k' 2028462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k' 2038462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k***' 2048462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k' 2058462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k**' 2068462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a****c**?**??*****' 2078462SApril.Chin@Sun.COMtest_case '<match>' "'-'" '[-abc]' 2088462SApril.Chin@Sun.COMtest_case '<match>' "'-'" '[abc-]' 2098462SApril.Chin@Sun.COMtest_case '<match>' "'\\'" '\\' 2108462SApril.Chin@Sun.COMtest_case '<match>' "'\\'" '[\\]' 2118462SApril.Chin@Sun.COMtest_case '<match>' "'\\'" "'\\'" 2128462SApril.Chin@Sun.COMtest_case '<match>' "'['" '[[]' 2138462SApril.Chin@Sun.COMtest_case '<match>' '[' '[[]' 2148462SApril.Chin@Sun.COMtest_case '<match>' "'['" '[' 2158462SApril.Chin@Sun.COMtest_case '<match>' '[' '[' 2168462SApril.Chin@Sun.COMtest_case '<match>' "'[abc'" "'['*" 2178462SApril.Chin@Sun.COMtest_case '<nomatch>' "'[abc'" '[*' 2188462SApril.Chin@Sun.COMtest_case '<match>' '[abc' "'['*" 2198462SApril.Chin@Sun.COMtest_case '<nomatch>' '[abc' '[*' 2208462SApril.Chin@Sun.COMtest_case '<match>' 'abd' "a[b/c]d" 2218462SApril.Chin@Sun.COMtest_case '<match>' 'a/d' "a[b/c]d" 2228462SApril.Chin@Sun.COMtest_case '<match>' 'acd' "a[b/c]d" 2238462SApril.Chin@Sun.COMtest_case '<match>' "']'" '[]]' 2248462SApril.Chin@Sun.COMtest_case '<match>' "'-'" '[]-]' 2258462SApril.Chin@Sun.COMtest_case '<match>' 'p' '[a-\z]' 2268462SApril.Chin@Sun.COMtest_case '<match>' '"/tmp"' '[/\\]*' 2278462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '??**********?****?' 2288462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '??**********?****c' 2298462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '?************c****?****' 2308462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '*c*?**' 2318462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' 'a*****c*?**' 2328462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' 'a********???*******' 2338462SApril.Chin@Sun.COMtest_case '<nomatch>' "'a'" '[]' 2348462SApril.Chin@Sun.COMtest_case '<nomatch>' 'a' '[]' 2358462SApril.Chin@Sun.COMtest_case '<nomatch>' "'['" '[abc' 2368462SApril.Chin@Sun.COMtest_case '<nomatch>' '[' '[abc' 2374887Schin 2388462SApril.Chin@Sun.COMtest_glob ++Beware '<b> <bb> <bcd> <bdir>' b* 2398462SApril.Chin@Sun.COMtest_glob '<Beware> <b> <bb> <bcd> <bdir>' [bB]* 2404887Schin 2414887Schinif ( set --nocaseglob ) 2>/dev/null 2424887Schinthen 2434887Schin set --nocaseglob 2444887Schin 2458462SApril.Chin@Sun.COM test_glob '<Beware> <b> <bb> <bcd> <bdir>' b* 2468462SApril.Chin@Sun.COM test_glob '<Beware> <b> <bb> <bcd> <bdir>' [b]* 2478462SApril.Chin@Sun.COM test_glob '<Beware> <b> <bb> <bcd> <bdir>' [bB]* 2484887Schin 2494887Schin set --nonocaseglob 2504887Schinfi 2514887Schin 2524887Schinif ( set -f ) 2>/dev/null 2534887Schinthen 2544887Schin set -f 2554887Schin 2568462SApril.Chin@Sun.COM test_glob '<*>' * 2574887Schin 2584887Schin set +f 2594887Schinfi 2604887Schin 2614887Schinif ( set --noglob ) 2>/dev/null 2624887Schinthen 2634887Schin set --noglob 2644887Schin 2658462SApril.Chin@Sun.COM test_glob '<*>' * 2664887Schin 2674887Schin set --glob 2684887Schinfi 2694887Schin 2704887SchinFIGNORE='.*|*' 2718462SApril.Chin@Sun.COMtest_glob '<*>' * 2724887Schin 2734887SchinFIGNORE='.*|*c|*e|?' 2748462SApril.Chin@Sun.COMtest_glob '<a-b> <aXb> <abd> <bb> <bcd> <bdir> <ca> <cb> <dd> <man>' * 2754887Schin 2764887SchinFIGNORE='.*|*b|*d|?' 2778462SApril.Chin@Sun.COMtest_glob '<Beware> <abc> <abe> <bdir> <ca> <de> <man>' * 2784887Schin 2794887SchinFIGNORE= 2808462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' */man*/sh.* 2814887Schin 2824887Schinunset FIGNORE 2838462SApril.Chin@Sun.COMtest_glob '<bb> <ca> <cb> <dd> <de>' ?? 2848462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' */man*/sh.* 2854887Schin 2864887SchinGLOBIGNORE='.*:*' 2874887Schinset -- * 2884887Schinif [[ $1 == '*' ]] 2894887Schinthen 2904887Schin GLOBIGNORE='.*:*c:*e:?' 2918462SApril.Chin@Sun.COM test_glob '<>' * 2924887Schin 2934887Schin GLOBIGNORE='.*:*b:*d:?' 2948462SApril.Chin@Sun.COM test_glob '<>' * 2954887Schin 2964887Schin unset GLOBIGNORE 2978462SApril.Chin@Sun.COM test_glob '<>' * 2988462SApril.Chin@Sun.COM test_glob '<man/man1/sh.1>' */man*/sh.* 2994887Schin 3004887Schin GLOBIGNORE= 3018462SApril.Chin@Sun.COM test_glob '<man/man1/sh.1>' */man*/sh.* 3024887Schinfi 3038462SApril.Chin@Sun.COMunset GLOBIGNORE 3048462SApril.Chin@Sun.COM 3058462SApril.Chin@Sun.COMfunction test_sub 3068462SApril.Chin@Sun.COM{ 3078462SApril.Chin@Sun.COM x='${subject'$2'}' 3088462SApril.Chin@Sun.COM eval g=$x 3098462SApril.Chin@Sun.COM if [[ "$g" != "$3" ]] 3108462SApril.Chin@Sun.COM then 'err_exit' $1 subject="'$subject' $x failed, expected '$3', got '$g'" 3118462SApril.Chin@Sun.COM fi 3128462SApril.Chin@Sun.COM} 3138462SApril.Chin@Sun.COMalias test_sub='test_sub $LINENO' 3148462SApril.Chin@Sun.COM 3158462SApril.Chin@Sun.COMset --noglob --nobraceexpand 3168462SApril.Chin@Sun.COM 3178462SApril.Chin@Sun.COMsubject='A regular expressions test' 3188462SApril.Chin@Sun.COM 3198462SApril.Chin@Sun.COMtest_sub '/e/#' 'A r#gular expressions test' 3208462SApril.Chin@Sun.COMtest_sub '//e/#' 'A r#gular #xpr#ssions t#st' 3218462SApril.Chin@Sun.COMtest_sub '/[^e]/#' '# regular expressions test' 3228462SApril.Chin@Sun.COMtest_sub '//[^e]/#' '###e######e###e########e##' 3238462SApril.Chin@Sun.COMtest_sub '/+(e)/#' 'A r#gular expressions test' 3248462SApril.Chin@Sun.COMtest_sub '//+(e)/#' 'A r#gular #xpr#ssions t#st' 3258462SApril.Chin@Sun.COMtest_sub '/@-(e)/#' 'A r#gular expressions test' 3268462SApril.Chin@Sun.COMtest_sub '//@-(e)/#' 'A r#gular #xpr#ssions t#st' 3278462SApril.Chin@Sun.COMtest_sub '/?(e)/#' '#A regular expressions test' 3288462SApril.Chin@Sun.COMtest_sub '//?(e)/#' '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#' 3298462SApril.Chin@Sun.COMtest_sub '/*(e)/#' '#A regular expressions test' 3308462SApril.Chin@Sun.COMtest_sub '//*(e)/#' '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#' 3318462SApril.Chin@Sun.COMtest_sub '//@(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 3328462SApril.Chin@Sun.COMtest_sub '//@-(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 3338462SApril.Chin@Sun.COMtest_sub '//+(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 3348462SApril.Chin@Sun.COMtest_sub '//+-(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 3358462SApril.Chin@Sun.COMtest_sub '//@(+(e))/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 3368462SApril.Chin@Sun.COMtest_sub '//@(+-(e))/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st' 3378462SApril.Chin@Sun.COMtest_sub '//-(e)/#' 'A regular expressions test' 3388462SApril.Chin@Sun.COMtest_sub '//--(e)/#' 'A regular expressions test' 3398462SApril.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[]' 3408462SApril.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[]' 3418462SApril.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[]' 3428462SApril.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[]' 3438462SApril.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[]' 3448462SApril.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[]' 3458462SApril.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[]' 3468462SApril.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[]' 3478462SApril.Chin@Sun.COMtest_sub '/?-(e)/#' '#A regular expressions test' 3488462SApril.Chin@Sun.COMtest_sub '/@(?-(e))/[\1]' '[]A regular expressions test' 3498462SApril.Chin@Sun.COMtest_sub '/!(e)/#' '#' 3508462SApril.Chin@Sun.COMtest_sub '//!(e)/#' '#' 3518462SApril.Chin@Sun.COMtest_sub '/@(!(e))/[\1]' '[A regular expressions test]' 3528462SApril.Chin@Sun.COMtest_sub '//@(!(e))/[\1]' '[A regular expressions test]' 3538462SApril.Chin@Sun.COM 3548462SApril.Chin@Sun.COMsubject='e' 3558462SApril.Chin@Sun.COM 3568462SApril.Chin@Sun.COMtest_sub '/!(e)/#' '#e' 3578462SApril.Chin@Sun.COMtest_sub '//!(e)/#' '#e#' 3588462SApril.Chin@Sun.COMtest_sub '/!(e)/[\1]' '[]e' 3598462SApril.Chin@Sun.COMtest_sub '//!(e)/[\1]' '[]e[]' 3608462SApril.Chin@Sun.COMtest_sub '/@(!(e))/[\1]' '[]e' 3618462SApril.Chin@Sun.COMtest_sub '//@(!(e))/[\1]' '[]e[]' 3628462SApril.Chin@Sun.COM 3638462SApril.Chin@Sun.COMsubject='a' 3648462SApril.Chin@Sun.COM 3658462SApril.Chin@Sun.COMtest_sub '/@(!(a))/[\1]' '[]a' 3668462SApril.Chin@Sun.COMtest_sub '//@(!(a))/[\1]' '[]a[]' 3678462SApril.Chin@Sun.COM 3688462SApril.Chin@Sun.COMsubject='aha' 3698462SApril.Chin@Sun.COM 3708462SApril.Chin@Sun.COMtest_sub '/@(!(a))/[\1]' '[aha]' 3718462SApril.Chin@Sun.COMtest_sub '//@(!(a))/[\1]' '[aha]' 3728462SApril.Chin@Sun.COMtest_sub '/@(!(aha))/[\1]' '[ah]a' 3738462SApril.Chin@Sun.COMtest_sub '//@(!(aha))/[\1]' '[ah][a]' 3744887Schin 3754887Schinexit $errors 376