da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# This software is part of the ast package #
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 1982-2010 AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# and is licensed under the #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Common Public License, Version 1.0 #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# by AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# A copy of the License is available at #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# http://www.opensource.org/licenses/cpl1.0.txt #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Information and Software Systems Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# AT&T Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Florham Park NJ #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# David Korn <dgk@research.att.com> #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfunction err_exit
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin print -u2 -r $'\t'"${Command}[$1] ${@:2}"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ((errors++))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias err_exit='err_exit $LINENO'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland MainzCommand=${0##*/}
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzinteger aware=0 contrary=0 errors=0 ignorant=0
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainztrap "cd /; rm -rf $tmp" EXIT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfunction test_glob
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset lineno expected drop arg got sep op val add del
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin lineno=$1
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin shift
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ $1 == --* ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then del=${1#--}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin shift
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ $1 == ++* ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then add=${1#++}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin shift
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin expected=$1
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin shift
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (( contrary ))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then if [[ $expected == "<Beware> "* ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then expected=${expected#"<Beware> "}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin expected="$expected <Beware>"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ $expected == *"<aXb> <abd>"* ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then expected=${expected/"<aXb> <abd>"/"<abd> <aXb>"}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for arg
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin do got="$got$sep<$arg>"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin sep=" "
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin done
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (( ignorant && aware ))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then if [[ $del ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then got="<$del> $got"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ $add ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin then expected="<$add> $expected"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ $got != "$expected" ]]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then 'err_exit' $lineno "glob -- expected '$expected', got '$got'"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinalias test_glob='test_glob $LINENO'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfunction test_case
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin typeset lineno expected subject pattern got
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin lineno=$1 expected=$2 subject=$3 pattern=$4
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin eval "
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin case $subject in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin $pattern) got='<match>' ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *) got='<nomatch>' ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin esac
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if [[ $got != "$expected" ]]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then 'err_exit' $lineno "case $subject in $pattern) -- expected '$expected', got '$got'"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinalias test_case='test_case $LINENO'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset undefined
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinexport LC_COLLATE=C
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainzcd $tmp || { err_exit "cd $tmp failed"; exit 1; }
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintouch B b
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinset -- *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincase $* in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin'b B') contrary=1 ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinb|B) ignorant=1 ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinesac
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinset -- $(/bin/sh -c 'echo [a-c]')
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincase $* in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinB) aware=1 ;;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinesac
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinrm -rf *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintouch a b c d abc abd abe bb bcd ca cb dd de Beware
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmkdir bdir
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<a> <abc> <abd> <abe> <X*>' a* X*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<a> <abc> <abd> <abe>' \a*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif ( set --nullglob ) 2>/dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set --nullglob
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<a> <abc> <abd> <abe>' a* X*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set --nonullglob
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif ( set --failglob ) 2>/dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set --failglob
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin mkdir tmp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin touch tmp/l1 tmp/l2 tmp/l3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '' tmp/l[12] tmp/*4 tmp/*3
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '' tmp/l[12] tmp/*4 tmp/*3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin rm -r tmp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set --nofailglob
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<bdir/>' b*/
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<*>' \*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<a*>' 'a*'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<a*>' a\*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<c> <ca> <cb> <a*> <*q*>' c* a\* *q*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<**>' "*"*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<**>' \**
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<\.\./*/>' "\.\./*/"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<s/\..*//>' 's/\..*//'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '</^root:/{s/^[!:]*:[!:]*:\([!:]*\).*$/\1/>' "/^root:/{s/^[!:]*:[!:]*:\([!:]*\).*"'$'"/\1/"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<abc> <abd> <abe> <bb> <cb>' [a-c]b*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob ++Beware '<abd> <abe> <bb> <bcd> <bdir> <ca> <cb> <dd> <de>' [a-y]*[!c]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<abd> <abe>' a*[!c]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintouch a-b aXb
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<a-b> <aXb>' a[X-]b
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintouch .x .y
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob --Beware '<Beware> <d> <dd> <de>' [!a-c]*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif mkdir a\*b 2>/dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin touch a\*b/ooo
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<a*b/ooo>' a\*b/*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<a*b/ooo>' a\*?/*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_case '<match>' '!7' '*\!*'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_case '<match>' 'r.*' '*.\*'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<abc>' a[b]c
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<abc>' a["b"]c
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<abc>' a[\b]c
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<abc>' a?c
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_case '<match>' 'abc' 'a"b"c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_case '<match>' 'abc' 'a*c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_case '<nomatch>' 'abc' '"a?c"'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_case '<nomatch>' 'abc' 'a\*c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_case '<nomatch>' 'abc' 'a\[b]c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_case '<match>' '"$undefined"' '""'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_case '<match>' 'abc' 'a["\b"]c'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin rm -rf mkdir a\*b
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmkdir man
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmkdir man/man1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintouch man/man1/sh.1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<man/man1/sh.1>' */man*/sh.*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<man/man1/sh.1>' $(echo */man*/sh.*)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<man/man1/sh.1>' "$(echo */man*/sh.*)"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' 'a***c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' 'a*****?c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' '?*****??'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' '*****??'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' '*****??c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' '?*****?c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' '?***?****c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' '?***?****?'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' '?***?****'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' '*******c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abc' '*******?'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abcdecdhjk' 'a*cd**?**??k'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k***'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k**'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abcdecdhjk' 'a****c**?**??*****'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "'-'" '[-abc]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "'-'" '[abc-]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "'\\'" '\\'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "'\\'" '[\\]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "'\\'" "'\\'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "'['" '[[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' '[' '[[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "'['" '['
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' '[' '['
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "'[abc'" "'['*"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' "'[abc'" '[*'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' '[abc' "'['*"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' '[abc' '[*'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'abd' "a[b/c]d"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'a/d' "a[b/c]d"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'acd' "a[b/c]d"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "']'" '[]]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' "'-'" '[]-]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' 'p' '[a-\z]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<match>' '"/tmp"' '[/\\]*'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' 'abc' '??**********?****?'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' 'abc' '??**********?****c'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' 'abc' '?************c****?****'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' 'abc' '*c*?**'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' 'abc' 'a*****c*?**'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' 'abc' 'a********???*******'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' "'a'" '[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' 'a' '[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' "'['" '[abc'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_case '<nomatch>' '[' '[abc'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob ++Beware '<b> <bb> <bcd> <bdir>' b*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<Beware> <b> <bb> <bcd> <bdir>' [bB]*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif ( set --nocaseglob ) 2>/dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set --nocaseglob
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<Beware> <b> <bb> <bcd> <bdir>' b*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<Beware> <b> <bb> <bcd> <bdir>' [b]*
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<Beware> <b> <bb> <bcd> <bdir>' [bB]*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set --nonocaseglob
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif ( set -f ) 2>/dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set -f
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<*>' *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set +f
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif ( set --noglob ) 2>/dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set --noglob
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<*>' *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin set --glob
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinFIGNORE='.*|*'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<*>' *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinFIGNORE='.*|*c|*e|?'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<a-b> <aXb> <abd> <bb> <bcd> <bdir> <ca> <cb> <dd> <man>' *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinFIGNORE='.*|*b|*d|?'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<Beware> <abc> <abe> <bdir> <ca> <de> <man>' *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinFIGNORE=
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<man/man1/sh.1>' */man*/sh.*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset FIGNORE
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<bb> <ca> <cb> <dd> <de>' ??
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_glob '<man/man1/sh.1>' */man*/sh.*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinGLOBIGNORE='.*:*'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinset -- *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $1 == '*' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin GLOBIGNORE='.*:*c:*e:?'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<>' *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin GLOBIGNORE='.*:*b:*d:?'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<>' *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unset GLOBIGNORE
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<>' *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<man/man1/sh.1>' */man*/sh.*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin GLOBIGNORE=
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin test_glob '<man/man1/sh.1>' */man*/sh.*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinunset GLOBIGNORE
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfunction test_sub
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin{
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin x='${subject'$2'}'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin eval g=$x
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin if [[ "$g" != "$3" ]]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin then 'err_exit' $1 subject="'$subject' $x failed, expected '$3', got '$g'"
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin fi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin}
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinalias test_sub='test_sub $LINENO'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinset --noglob --nobraceexpand
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinsubject='A regular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/e/#' 'A r#gular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//e/#' 'A r#gular #xpr#ssions t#st'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/[^e]/#' '# regular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//[^e]/#' '###e######e###e########e##'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/+(e)/#' 'A r#gular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//+(e)/#' 'A r#gular #xpr#ssions t#st'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/@-(e)/#' 'A r#gular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@-(e)/#' 'A r#gular #xpr#ssions t#st'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/?(e)/#' '#A regular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//?(e)/#' '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/*(e)/#' '#A regular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//*(e)/#' '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@-(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//+(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//+-(e)/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@(+(e))/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@(+-(e))/[\1]' 'A r[e]gular [e]xpr[e]ssions t[e]st'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//-(e)/#' 'A regular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//--(e)/#' 'A regular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_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[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_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[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_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[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_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[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_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[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_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[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_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[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_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[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/?-(e)/#' '#A regular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/@(?-(e))/[\1]' '[]A regular expressions test'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/!(e)/#' '#'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//!(e)/#' '#'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/@(!(e))/[\1]' '[A regular expressions test]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@(!(e))/[\1]' '[A regular expressions test]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinsubject='e'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/!(e)/#' '#e'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//!(e)/#' '#e#'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/!(e)/[\1]' '[]e'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//!(e)/[\1]' '[]e[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/@(!(e))/[\1]' '[]e'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@(!(e))/[\1]' '[]e[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinsubject='a'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/@(!(a))/[\1]' '[]a'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@(!(a))/[\1]' '[]a[]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinsubject='aha'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/@(!(a))/[\1]' '[aha]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@(!(a))/[\1]' '[aha]'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '/@(!(aha))/[\1]' '[ah]a'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chintest_sub '//@(!(aha))/[\1]' '[ah][a]'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinexit $errors