1 ######################################################################## 2 # # 3 # This software is part of the ast package # 4 # Copyright (c) 1982-2010 AT&T Intellectual Property # 5 # and is licensed under the # 6 # Common Public License, Version 1.0 # 7 # by AT&T Intellectual Property # 8 # # 9 # A copy of the License is available at # 10 # http://www.opensource.org/licenses/cpl1.0.txt # 11 # (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) # 12 # # 13 # Information and Software Systems Research # 14 # AT&T Research # 15 # Florham Park NJ # 16 # # 17 # David Korn <dgk@research.att.com> # 18 # # 19 ######################################################################## 20 function err_exit 21 { 22 print -u2 -n "\t" 23 print -u2 -r ${Command}[$1]: "${@:2}" 24 let Errors+=1 25 } 26 alias err_exit='err_exit $LINENO' 27 28 Command=${0##*/} 29 integer Errors=0 30 if [[ 'hi there' != "hi there" ]] 31 then err_exit "single quotes not the same as double quotes" 32 fi 33 x='hi there' 34 if [[ $x != 'hi there' ]] 35 then err_exit "$x not the same as 'hi there'" 36 fi 37 if [[ $x != "hi there" ]] 38 then err_exit "$x not the same as \"hi there \"" 39 fi 40 if [[ \a\b\c\*\|\"\ \\ != 'abc*|" \' ]] 41 then err_exit " \\ differs from '' " 42 fi 43 if [[ "ab\'\"\$(" != 'ab\'\''"$(' ]] 44 then err_exit " \"\" differs from '' " 45 fi 46 if [[ $(print -r - 'abc*|" \') != 'abc*|" \' ]] 47 then err_exit "\$(print -r - '') differs from ''" 48 fi 49 if [[ $(print -r - "abc*|\" \\") != 'abc*|" \' ]] 50 then err_exit "\$(print -r - '') differs from ''" 51 fi 52 if [[ "$(print -r - 'abc*|" \')" != 'abc*|" \' ]] 53 then err_exit "\"\$(print -r - '')\" differs from ''" 54 fi 55 if [[ "$(print -r - "abc*|\" \\")" != 'abc*|" \' ]] 56 then err_exit "\"\$(print -r - "")\" differs from ''" 57 fi 58 if [[ $(print -r - $(print -r - 'abc*|" \')) != 'abc*|" \' ]] 59 then err_exit "nested \$(print -r - '') differs from ''" 60 fi 61 if [[ "$(print -r - $(print -r - 'abc*|" \'))" != 'abc*|" \' ]] 62 then err_exit "\"nested \$(print -r - '')\" differs from ''" 63 fi 64 if [[ $(print -r - "$(print -r - 'abc*|" \')") != 'abc*|" \' ]] 65 then err_exit "nested \"\$(print -r - '')\" differs from ''" 66 fi 67 unset x 68 if [[ ${x-$(print -r - "abc*|\" \\")} != 'abc*|" \' ]] 69 then err_exit "\${x-\$(print -r - '')} differs from ''" 70 fi 71 if [[ ${x-$(print -r - "a}c*|\" \\")} != 'a}c*|" \' ]] 72 then err_exit "\${x-\$(print -r - '}')} differs from ''" 73 fi 74 x=$((echo foo)|(cat)) 75 if [[ $x != foo ]] 76 then err_exit "((cmd)|(cmd)) failed" 77 fi 78 x=$(print -r -- "\"$HOME\"") 79 if [[ $x != '"'$HOME'"' ]] 80 then err_exit "nested double quotes failed" 81 fi 82 : ${z="a{b}c"} 83 if [[ $z != 'a{b}c' ]] 84 then err_exit '${z="a{b}c"} not correct' 85 fi 86 unset z 87 : "${z="a{b}c"}" 88 if [[ $z != 'a{b}c' ]] 89 then err_exit '"${z="a{b}c"}" not correct' 90 fi 91 if [[ $(print -r -- "a\*b") != 'a\*b' ]] 92 then err_exit '$(print -r -- "a\*b") differs from a\*b' 93 fi 94 unset x 95 if [[ $(print -r -- "a\*b$x") != 'a\*b' ]] 96 then err_exit '$(print -r -- "a\*b$x") differs from a\*b' 97 fi 98 x=hello 99 set -- ${x+foo bar bam} 100 if (( $# !=3 )) 101 then err_exit '${x+foo bar bam} does not yield three arguments' 102 fi 103 set -- ${x+foo "bar bam"} 104 if (( $# !=2 )) 105 then err_exit '${x+foo "bar bam"} does not yield two arguments' 106 fi 107 set -- ${x+foo 'bar bam'} 108 if (( $# !=2 )) 109 then err_exit '${x+foo '\''bar bam'\''} does not yield two arguments' 110 fi 111 set -- ${x+foo $x bam} 112 if (( $# !=3 )) 113 then err_exit '${x+foo $x bam} does not yield three arguments' 114 fi 115 set -- ${x+foo "$x" bam} 116 if (( $# !=3 )) 117 then err_exit '${x+foo "$x" bam} does not yield three arguments' 118 fi 119 set -- ${x+"foo $x bam"} 120 if (( $# !=1 )) 121 then err_exit '${x+"foo $x bam"} does not yield one argument' 122 fi 123 set -- "${x+foo $x bam}" 124 if (( $# !=1 )) 125 then err_exit '"${x+foo $x bam}" does not yield one argument' 126 fi 127 set -- ${x+foo "$x "bam} 128 if (( $# !=2 )) 129 then err_exit '${x+foo "$x "bam} does not yield two arguments' 130 fi 131 x="ab$'cd" 132 if [[ $x != 'ab$'"'cd" ]] 133 then err_exit '$'"' inside double quotes not working" 134 fi 135 x=`print 'ab$'` 136 if [[ $x != 'ab$' ]] 137 then err_exit '$'"' inside `` quotes not working" 138 fi 139 unset a 140 x=$(print -r -- "'\ 141 \ 142 ") 143 if [[ $x != "'" ]] 144 then err_exit 'line continuation in double strings not working' 145 fi 146 x=$(print -r -- "'\ 147 $a\ 148 ") 149 if [[ $x != "'" ]] 150 then err_exit 'line continuation in expanded double strings not working' 151 fi 152 x='\*' 153 if [[ $(print -r -- $x) != '\*' ]] 154 then err_exit 'x="\\*";$x != \*' 155 fi 156 x=' hello world ' 157 set -- $x 158 if (( $# != 2 )) 159 then err_exit 'field splitting error' 160 fi 161 x=$(print -r -- '1234567890123456789012345678901234567890123456789012345678901234567890 \ 162 1234567890123456789012345678901234567890123456789012345678901234567890 \ 163 1234567890123456789012345678901234567890123456789012345678901234567890 \ 164 1234567890123456789012345678901234567890123456789012345678901234567890 \ 165 1234567890123456789012345678901234567890123456789012345678901234567890 \ 166 1234567890123456789012345678901234567890123456789012345678901234567890 \ 167 1234567890123456789012345678901234567890123456789012345678901234567890 \ 168 1234567890123456789012345678901234567890123456789012345678901234567890 \ 169 1234567890123456789012345678901234567890123456789012345678901234567890 \ 170 1234567890123456789012345678901234567890123456789012345678901234567890 \ 171 1234567890123456789012345678901234567890123456789012345678901234567890 \ 172 1234567890123456789012345678901234567890123456789012345678901234567890 \ 173 1234567890123456789012345678901234567890123456789012345678901234567890 \ 174 1234567890123456789012345678901234567890123456789012345678901234567890 \ 175 1234567890123456789012345678901234567890123456789012345678901234567890') 176 if (( ${#x} != (15*73-3) )) 177 then err_exit "length of x, ${#x}, is incorrect should be $((15*73-3))" 178 fi 179 x='$hi' 180 if [[ $x\$ != '$hi$' ]] 181 then err_exit ' $x\$, with x=$hi, does not expand to $hi$' 182 fi 183 if [[ $x$ != '$hi$' ]] 184 then err_exit ' $x$, with x=$hi, does not expand to $hi$' 185 fi 186 set -- $(/bin/echo foo;sleep 1;/bin/echo bar) 187 if [[ $# != 2 ]] 188 then err_exit 'word splitting after command substitution not working' 189 fi 190 unset q 191 if [[ "${q:+'}q${q:+'}" != q ]] 192 then err_exit 'expansion of "{q:+'\''}" not correct when q unset' 193 fi 194 q=1 195 if [[ "${q:+'}q${q:+'}" != "'q'" ]] 196 then err_exit 'expansion of "{q:+'\''}" not correct when q set' 197 fi 198 x=$'x\' #y' 199 if [[ $x != "x' #y" ]] 200 then err_exit "$'x\' #y'" not working 201 fi 202 x=$q$'x\' #y' 203 if [[ $x != "1x' #y" ]] 204 then err_exit "$q$'x\' #y'" not working 205 fi 206 IFS=, 207 x='a,b\,c,d' 208 set -- $x 209 if [[ $2 != 'b\' ]] 210 then err_exit "field splitting of $x with IFS=$IFS not working" 211 fi 212 foo=bar 213 bar=$(print -r -- ${foo+\\n\ }) 214 if [[ $bar != '\n ' ]] 215 then err_exit '${foo+\\n\ } expansion error' 216 fi 217 unset bar 218 bar=$(print -r -- ${foo+\\n\ $bar}) 219 if [[ $bar != '\n ' ]] 220 then err_exit '${foo+\\n\ $bar} expansion error with bar unset' 221 fi 222 x='\\(..\\)|&\|\|\\&\\|' 223 if [[ $(print -r -- $x) != "$x" ]] 224 then err_exit '$x, where x=\\(..\\)|&\|\|\\&\\| not working' 225 fi 226 x='\\(' 227 if [[ $(print -r -- a${x}b) != a"${x}"b ]] 228 then err_exit 'a${x}b, where x=\\( not working' 229 fi 230 x= 231 if [[ $(print -r -- $x'\\1') != '\\1' ]] 232 then err_exit 'backreference inside single quotes broken' 233 fi 234 set -- '' 235 set -- "$@" 236 if (( $# != 1 )) 237 then err_exit '"$@" not preserving nulls' 238 fi 239 x= 240 if [[ $(print -r s"!\2${x}\1\a!") != 's!\2\1\a!' ]] 241 then err_exit 'print -r s"!\2${x}\1\a!" not equal s!\2\1\a!' 242 fi 243 if [[ $(print -r $'foo\n\n\n') != foo ]] 244 then err_exit 'trailing newlines on comsubstitution not removed' 245 fi 246 unset x 247 if [[ ${x:='//'} != '//' ]] 248 then err_exit '${x:='//'} != "//"' 249 fi 250 if [[ $(print -r "\"hi$\"") != '"hi$"' ]] 251 then err_exit '$\ not correct inside ""' 252 fi 253 unset x 254 if [[ "${x-a\}b}" != 'a}b' ]] 255 then err_exit '"${x-a\}b}" != "a}b"' 256 fi 257 if [[ "\}\]$x\*\{\[\\" != '\}\]\*\{\[\' ]] 258 then err_exit '"\}\]$x\*\{\[\\" != "\}\]\*\{\[\"' 259 fi 260 foo=yes 261 if [[ $(print -r -- {\$foo}) != '{$foo}' ]] 262 then err_exit '{\$foo}' not expanded correctly 263 fi 264 [[ foo == $( 265 ########################################################### 266 ########################################################### 267 ########################################################### 268 ########################################################### 269 ########################################################### 270 ########################################################### 271 ########################################################### 272 ########################################################### 273 ########################################################### 274 ########################################################### 275 ########################################################### 276 ########################################################### 277 ########################################################### 278 ########################################################### 279 ########################################################### 280 ########################################################### 281 ########################################################### 282 ########################################################### 283 ########################################################### 284 ########################################################### 285 ########################################################### 286 ########################################################### 287 ########################################################### 288 ########################################################### 289 ########################################################### 290 ########################################################### 291 ########################################################### 292 ########################################################### 293 ########################################################### 294 ########################################################### 295 ########################################################### 296 ########################################################### 297 ########################################################### 298 ########################################################### 299 ########################################################### 300 ########################################################### 301 ########################################################### 302 ########################################################### 303 print foo) ]] || err_exit "command subsitution with long comments broken" 304 subject='some/other/words' 305 re='(?*)/(?*)/(?*)' 306 [[ ${subject/${re}/\3} != words ]] && err_exit 'string replacement with \3 not working' 307 [[ ${subject/${re}/'\3'} != '\3' ]] && err_exit 'string replacement with '"'\3'"' not working' 308 [[ ${subject/${re}/"\\3"} != '\3' ]] && err_exit 'string replacement with "\\3" not working' 309 [[ ${subject/${re}/"\3"} != '\3' ]] && err_exit 'string replacement with "\3" not working' 310 string='\3' 311 [[ ${subject/${re}/${string}} != words ]] && err_exit 'string replacement with $string not working with string=\3' 312 [[ $(print -r "${subject/${re}/${string}}") != words ]] && err_exit 'string replacement with $string not working with string=\3 using print' 313 [[ ${subject/${re}/"${string}"} != '\3' ]] && err_exit 'string replacement with "$string" not working with string=\3' 314 [[ $(print -r "${subject/${re}/"${string}"}") != '\3' ]] && err_exit 'string replacement with "$string" not working with string=\3 using print' 315 string='\\3' 316 [[ ${subject/${re}/${string}} != '\3' ]] && err_exit 'string replacement with $string not working with string=\\3' 317 [[ ${subject/${re}/"${string}"} != '\\3' ]] && err_exit 'string replacement with "$string" not working with string=\\3' 318 [[ ${subject/${re}/\4} != '\4' ]] && err_exit 'string replacement with \4 not working' 319 [[ ${subject/${re}/'\4'} != '\4' ]] && err_exit 'string replacement with '\4' not working' 320 string='\4' 321 [[ ${subject/${re}/${string}} != '\4' ]] && err_exit 'string replacement with $string not working with string=\4' 322 [[ ${subject/${re}/"${string}"} != '\4' ]] && err_exit 'string replacement with "$string" not working with string=\4' 323 string='&foo' 324 [[ ${subject/${re}/${string}} != '&foo' ]] && err_exit 'string replacement with $string not working with string=&foo' 325 [[ ${subject/${re}/"${string}"} != '&foo' ]] && err_exit 'string replacement with "$string" not working with string=&foo' 326 { 327 x=x 328 x=${x:-`id | sed 's/^[^(]*(\([^)]*\)).*/\1/'`} 329 } 2> /dev/null || err_exit 'skipping over `` failed' 330 [[ $x == x ]] || err_exit 'assignment ${x:=`...`} failed' 331 [[ $($SHELL -c 'print a[') == 'a[' ]] || err_exit "unbalanced '[' in command arg fails" 332 $SHELL -c $'false && (( `wc -l /dev/null | /usr/xpg4/bin/awk \'{print $1}\'` > 2 )) && true;:' 2> /dev/null || err_exit 'syntax error with ` in arithmetic expression' 333 { $SHELL -c '(( 1`: "{ }"` ))' ;} 2> /dev/null || err_exit 'problem with ` inside (())' 334 varname=foobarx 335 x=`print '"\$'${varname}'"'` 336 [[ $x == '"$foobarx"' ]] || err_exit $'\\$\' not handled correctly inside ``' 337 338 copy1=5 copynum=1 339 foo="`eval echo "$"{copy$copynum"-0}"`" 340 [[ $foo == "$copy1" ]] || err_exit '$"..." not being ignored inside ``' 341 342 exit $((Errors))