1da2e3ebdSchin######################################################################## 2da2e3ebdSchin# # 3da2e3ebdSchin# This software is part of the ast package # 4*3e14f97fSRoger A. Faulkner# Copyright (c) 1982-2010 AT&T Intellectual Property # 5da2e3ebdSchin# and is licensed under the # 6da2e3ebdSchin# Common Public License, Version 1.0 # 77c2fbfb3SApril Chin# by AT&T Intellectual Property # 8da2e3ebdSchin# # 9da2e3ebdSchin# A copy of the License is available at # 10da2e3ebdSchin# http://www.opensource.org/licenses/cpl1.0.txt # 11da2e3ebdSchin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) # 12da2e3ebdSchin# # 13da2e3ebdSchin# Information and Software Systems Research # 14da2e3ebdSchin# AT&T Research # 15da2e3ebdSchin# Florham Park NJ # 16da2e3ebdSchin# # 17da2e3ebdSchin# David Korn <dgk@research.att.com> # 18da2e3ebdSchin# # 19da2e3ebdSchin######################################################################## 20da2e3ebdSchinfunction err_exit 21da2e3ebdSchin{ 22da2e3ebdSchin print -u2 -n "\t" 23da2e3ebdSchin print -u2 -r ${Command}[$1]: "${@:2}" 24da2e3ebdSchin let Errors+=1 25da2e3ebdSchin} 26da2e3ebdSchinalias err_exit='err_exit $LINENO' 27da2e3ebdSchin 28da2e3ebdSchinCommand=${0##*/} 29da2e3ebdSchininteger Errors=0 30da2e3ebdSchinset -o noglob 31da2e3ebdSchinif [[ 'hi there' != "hi there" ]] 32da2e3ebdSchinthen err_exit "single quotes not the same as double quotes" 33da2e3ebdSchinfi 34da2e3ebdSchinx='hi there' 35da2e3ebdSchinif [[ $x != 'hi there' ]] 36da2e3ebdSchinthen err_exit "$x not the same as 'hi there'" 37da2e3ebdSchinfi 38da2e3ebdSchinif [[ $x != "hi there" ]] 39da2e3ebdSchinthen err_exit "$x not the same as \"hi there \"" 40da2e3ebdSchinfi 41da2e3ebdSchinif [[ \a\b\c\*\|\"\ \\ != 'abc*|" \' ]] 42da2e3ebdSchinthen err_exit " \\ differs from '' " 43da2e3ebdSchinfi 44da2e3ebdSchinif [[ "ab\'\"\$(" != 'ab\'\''"$(' ]] 45da2e3ebdSchinthen err_exit " \"\" differs from '' " 46da2e3ebdSchinfi 47da2e3ebdSchinif [[ $(print -r - 'abc*|" \') != 'abc*|" \' ]] 48da2e3ebdSchinthen err_exit "\$(print -r - '') differs from ''" 49da2e3ebdSchinfi 50da2e3ebdSchinif [[ $(print -r - "abc*|\" \\") != 'abc*|" \' ]] 51da2e3ebdSchinthen err_exit "\$(print -r - '') differs from ''" 52da2e3ebdSchinfi 53da2e3ebdSchinif [[ "$(print -r - 'abc*|" \')" != 'abc*|" \' ]] 54da2e3ebdSchinthen err_exit "\"\$(print -r - '')\" differs from ''" 55da2e3ebdSchinfi 56da2e3ebdSchinif [[ "$(print -r - "abc*|\" \\")" != 'abc*|" \' ]] 57da2e3ebdSchinthen err_exit "\"\$(print -r - "")\" differs from ''" 58da2e3ebdSchinfi 59da2e3ebdSchinif [[ $(print -r - "$(print -r - 'abc*|" \')") != 'abc*|" \' ]] 60da2e3ebdSchinthen err_exit "nested \$(print -r - '') differs from ''" 61da2e3ebdSchinfi 62da2e3ebdSchinif [[ "$(print -r - $(print -r - 'abc*|" \'))" != 'abc*|" \' ]] 63da2e3ebdSchinthen err_exit "\"nested \$(print -r - '')\" differs from ''" 64da2e3ebdSchinfi 65da2e3ebdSchinif [[ $(print -r - "$(print -r - 'abc*|" \')") != 'abc*|" \' ]] 66da2e3ebdSchinthen err_exit "nested \"\$(print -r - '')\" differs from ''" 67da2e3ebdSchinfi 68da2e3ebdSchinunset x 69da2e3ebdSchinif [[ ${x-$(print -r - "abc*|\" \\")} != 'abc*|" \' ]] 70da2e3ebdSchinthen err_exit "\${x-\$(print -r - '')} differs from ''" 71da2e3ebdSchinfi 72da2e3ebdSchinif [[ ${x-$(print -r - "a}c*|\" \\")} != 'a}c*|" \' ]] 73da2e3ebdSchinthen err_exit "\${x-\$(print -r - '}')} differs from ''" 74da2e3ebdSchinfi 75da2e3ebdSchinx=$((echo foo)|(cat)) 76da2e3ebdSchinif [[ $x != foo ]] 77da2e3ebdSchinthen err_exit "((cmd)|(cmd)) failed" 78da2e3ebdSchinfi 79da2e3ebdSchinx=$(print -r -- "\"$HOME\"") 80da2e3ebdSchinif [[ $x != '"'$HOME'"' ]] 81da2e3ebdSchinthen err_exit "nested double quotes failed" 82da2e3ebdSchinfi 83da2e3ebdSchin: ${z="a{b}c"} 84da2e3ebdSchinif [[ $z != 'a{b}c' ]] 85da2e3ebdSchinthen err_exit '${z="a{b}c"} not correct' 86da2e3ebdSchinfi 87da2e3ebdSchinunset z 88da2e3ebdSchin: "${z="a{b}c"}" 89da2e3ebdSchinif [[ $z != 'a{b}c' ]] 90da2e3ebdSchinthen err_exit '"${z="a{b}c"}" not correct' 91da2e3ebdSchinfi 92da2e3ebdSchinif [[ $(print -r -- "a\*b") != 'a\*b' ]] 93da2e3ebdSchinthen err_exit '$(print -r -- "a\*b") differs from a\*b' 94da2e3ebdSchinfi 95da2e3ebdSchinunset x 96da2e3ebdSchinif [[ $(print -r -- "a\*b$x") != 'a\*b' ]] 97da2e3ebdSchinthen err_exit '$(print -r -- "a\*b$x") differs from a\*b' 98da2e3ebdSchinfi 99da2e3ebdSchinx=hello 100da2e3ebdSchinset -- ${x+foo bar bam} 101da2e3ebdSchinif (( $# !=3 )) 102da2e3ebdSchinthen err_exit '${x+foo bar bam} does not yield three arguments' 103da2e3ebdSchinfi 104da2e3ebdSchinset -- ${x+foo "bar bam"} 105da2e3ebdSchinif (( $# !=2 )) 106da2e3ebdSchinthen err_exit '${x+foo "bar bam"} does not yield two arguments' 107da2e3ebdSchinfi 108da2e3ebdSchinset -- ${x+foo 'bar bam'} 109da2e3ebdSchinif (( $# !=2 )) 110da2e3ebdSchinthen err_exit '${x+foo '\''bar bam'\''} does not yield two arguments' 111da2e3ebdSchinfi 112da2e3ebdSchinset -- ${x+foo $x bam} 113da2e3ebdSchinif (( $# !=3 )) 114da2e3ebdSchinthen err_exit '${x+foo $x bam} does not yield three arguments' 115da2e3ebdSchinfi 116da2e3ebdSchinset -- ${x+foo "$x" bam} 117da2e3ebdSchinif (( $# !=3 )) 118da2e3ebdSchinthen err_exit '${x+foo "$x" bam} does not yield three arguments' 119da2e3ebdSchinfi 120da2e3ebdSchinset -- ${x+"foo $x bam"} 121da2e3ebdSchinif (( $# !=1 )) 122da2e3ebdSchinthen err_exit '${x+"foo $x bam"} does not yield one argument' 123da2e3ebdSchinfi 124da2e3ebdSchinset -- "${x+foo $x bam}" 125da2e3ebdSchinif (( $# !=1 )) 126da2e3ebdSchinthen err_exit '"${x+foo $x bam}" does not yield one argument' 127da2e3ebdSchinfi 128da2e3ebdSchinset -- ${x+foo "$x "bam} 129da2e3ebdSchinif (( $# !=2 )) 130da2e3ebdSchinthen err_exit '${x+foo "$x "bam} does not yield two arguments' 131da2e3ebdSchinfi 132da2e3ebdSchinx="ab$'cd" 133da2e3ebdSchinif [[ $x != 'ab$'"'cd" ]] 134da2e3ebdSchinthen err_exit '$'"' inside double quotes not working" 135da2e3ebdSchinfi 136da2e3ebdSchinx=`print 'ab$'` 137da2e3ebdSchinif [[ $x != 'ab$' ]] 138da2e3ebdSchinthen err_exit '$'"' inside `` quotes not working" 139da2e3ebdSchinfi 140da2e3ebdSchinunset a 141da2e3ebdSchinx=$(print -r -- "'\ 142da2e3ebdSchin\ 143da2e3ebdSchin") 144da2e3ebdSchinif [[ $x != "'" ]] 145da2e3ebdSchinthen err_exit 'line continuation in double strings not working' 146da2e3ebdSchinfi 147da2e3ebdSchinx=$(print -r -- "'\ 148da2e3ebdSchin$a\ 149da2e3ebdSchin") 150da2e3ebdSchinif [[ $x != "'" ]] 151da2e3ebdSchinthen err_exit 'line continuation in expanded double strings not working' 152da2e3ebdSchinfi 153da2e3ebdSchinx='\*' 154da2e3ebdSchinif [[ $(print -r -- $x) != '\*' ]] 155da2e3ebdSchinthen err_exit 'x="\\*";$x != \*' 156da2e3ebdSchinfi 157da2e3ebdSchinif [[ $(print -r -- "\}" ) != '\}' ]] 158da2e3ebdSchinthen err_exit '(print -r -- "\}"' not working 159da2e3ebdSchinfi 160da2e3ebdSchinif [[ $(print -r -- "\{" ) != '\{' ]] 161da2e3ebdSchinthen err_exit 'print -r -- "\{"' not working 162da2e3ebdSchinfi 163da2e3ebdSchin# The following caused a syntax error on earlier versions 164da2e3ebdSchinfoo=foo x=- 165da2e3ebdSchinif [[ `eval print \\${foo$x}` != foo* ]] 166da2e3ebdSchinthen err_exit '`eval print \\${foo$x}`' not working 167da2e3ebdSchinfi 168da2e3ebdSchinif [[ "`eval print \\${foo$x}`" != foo* ]] 169da2e3ebdSchinthen err_exit '"`eval print \\${foo$x}`"' not working 170da2e3ebdSchinfi 171da2e3ebdSchinif ( [[ $() != '' ]] ) 172da2e3ebdSchinthen err_exit '$() not working' 173da2e3ebdSchinfi 174da2e3ebdSchinx=a:b:c 175da2e3ebdSchinset -- $( IFS=:; print $x) 176da2e3ebdSchinif (( $# != 3)) 177da2e3ebdSchinthen err_exit 'IFS not working correctly with command substitution' 178da2e3ebdSchinfi 179da2e3ebdSchin$SHELL -n 2> /dev/null << \! || err_exit '$(...) bug with ( in comment' 180da2e3ebdSchiny=$( 181da2e3ebdSchin # ( this line is a bug fix 182da2e3ebdSchin print hi 183da2e3ebdSchin) 184da2e3ebdSchin! 185da2e3ebdSchinx= 186da2e3ebdSchinfor j in glob noglob 187da2e3ebdSchindo for i in 'a\*b' 'a\ b' 'a\bc' 'a\*b' 'a\"b' 188da2e3ebdSchin do eval [[ '$('print -r -- \'$i\'\$x')' != "'$i'" ]] && err_exit "quoting of $i\$x with $j enabled failed" 189da2e3ebdSchin eval [[ '$('print -r -- \'$i\'\${x%*}')' != "'$i'" ]] && err_exit "quoting of $i\${x%*} with $j enabled failed" 190da2e3ebdSchin if [[ $j == noglob ]] 191da2e3ebdSchin then eval [[ '$('print -r -- \'$i\'\${x:-*}')' != "'$i''*'" ]] && err_exit "quoting of $i\${x:-*} with $j enabled failed" 192da2e3ebdSchin fi 193da2e3ebdSchin done 194da2e3ebdSchin set -f 195da2e3ebdSchindone 196da2e3ebdSchinfoo=foo 197da2e3ebdSchin[[ "$" == '$' ]] || err_exit '"$" != $' 198da2e3ebdSchin[[ "${foo}$" == 'foo$' ]] || err_exit 'foo=foo;"${foo}$" != foo$' 199da2e3ebdSchin[[ "${foo}${foo}$" == 'foofoo$' ]] || err_exit 'foo=foo;"${foo}${foo}$" != foofoo$' 2007c2fbfb3SApril Chinfoo='$ ' 2017c2fbfb3SApril Chin[[ "$foo" == ~(Elr)(\\\$|#)\ ]] || err_exit $'\'$ \' not matching RE \\\\\\$|#\'' 2027c2fbfb3SApril Chin[[ "$foo" == ~(Elr)('\$'|#)\ ]] || err_exit $'\'$ \' not matching RE \'\\$\'|#\'' 2037c2fbfb3SApril Chinfoo='# ' 2047c2fbfb3SApril Chin[[ "$foo" == ~(Elr)(\\\$|#)\ ]] || err_exit $'\'# \' not matching RE \\'\$|#\'' 2057c2fbfb3SApril Chin[[ "$foo" == ~(Elr)('\$'|#)\ ]] || err_exit $'\'# \' not matching RE \'\\$\'|#\'' 2067c2fbfb3SApril Chin[[ '\$' == '\$'* ]] || err_exit $'\'\\$\' not matching \'\\$\'*' 20734f9b3eeSRoland Mainz[[ a+a == ~(E)a\+a ]] || err_exit '~(E)a\+a not matching a+a' 20834f9b3eeSRoland Mainz[[ a+a =~ a\+a ]] || err_exit 'RE a\+a not matching a+a' 209da2e3ebdSchinexit $((Errors)) 210