1*7c356e86SAndroid Build Coastguard Worker# $MirOS: src/bin/mksh/check.t,v 1.853 2020/10/31 03:53:03 tg Exp $ 2*7c356e86SAndroid Build Coastguard Worker# -*- mode: sh -*- 3*7c356e86SAndroid Build Coastguard Worker#- 4*7c356e86SAndroid Build Coastguard Worker# Copyright © 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 5*7c356e86SAndroid Build Coastguard Worker# 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 6*7c356e86SAndroid Build Coastguard Worker# 2019, 2020 7*7c356e86SAndroid Build Coastguard Worker# mirabilos <[email protected]> 8*7c356e86SAndroid Build Coastguard Worker# 9*7c356e86SAndroid Build Coastguard Worker# Provided that these terms and disclaimer and all copyright notices 10*7c356e86SAndroid Build Coastguard Worker# are retained or reproduced in an accompanying document, permission 11*7c356e86SAndroid Build Coastguard Worker# is granted to deal in this work without restriction, including un‐ 12*7c356e86SAndroid Build Coastguard Worker# limited rights to use, publicly perform, distribute, sell, modify, 13*7c356e86SAndroid Build Coastguard Worker# merge, give away, or sublicence. 14*7c356e86SAndroid Build Coastguard Worker# 15*7c356e86SAndroid Build Coastguard Worker# This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to 16*7c356e86SAndroid Build Coastguard Worker# the utmost extent permitted by applicable law, neither express nor 17*7c356e86SAndroid Build Coastguard Worker# implied; without malicious intent or gross negligence. In no event 18*7c356e86SAndroid Build Coastguard Worker# may a licensor, author or contributor be held liable for indirect, 19*7c356e86SAndroid Build Coastguard Worker# direct, other damage, loss, or other issues arising in any way out 20*7c356e86SAndroid Build Coastguard Worker# of dealing in the work, even if advised of the possibility of such 21*7c356e86SAndroid Build Coastguard Worker# damage or existence of a defect, except proven that it results out 22*7c356e86SAndroid Build Coastguard Worker# of said person’s immediate fault when using the work as intended. 23*7c356e86SAndroid Build Coastguard Worker#- 24*7c356e86SAndroid Build Coastguard Worker# You may also want to test IFS with the script at 25*7c356e86SAndroid Build Coastguard Worker# http://www.research.att.com/~gsf/public/ifs.sh 26*7c356e86SAndroid Build Coastguard Worker# 27*7c356e86SAndroid Build Coastguard Worker# More testsuites at: 28*7c356e86SAndroid Build Coastguard Worker# http://svnweb.freebsd.org/base/head/bin/test/tests/legacy_test.sh?view=co&content-type=text%2Fplain 29*7c356e86SAndroid Build Coastguard Worker# 30*7c356e86SAndroid Build Coastguard Worker# Integrated testsuites from: 31*7c356e86SAndroid Build Coastguard Worker# (2013/12/02 20:39:44) http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/regress/bin/ksh/?sortby=date 32*7c356e86SAndroid Build Coastguard Worker 33*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 34*7c356e86SAndroid Build Coastguard Worker KSH R59 2020/10/31 35*7c356e86SAndroid Build Coastguard Workerdescription: 36*7c356e86SAndroid Build Coastguard Worker Check base version of full shell 37*7c356e86SAndroid Build Coastguard Workerstdin: 38*7c356e86SAndroid Build Coastguard Worker vsn=${KSH_VERSION%%' +'*} 39*7c356e86SAndroid Build Coastguard Worker echo "${vsn#* }" 40*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION 41*7c356e86SAndroid Build Coastguard Worker--- 42*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 43*7c356e86SAndroid Build Coastguard Worker @(#)MIRBSD 44*7c356e86SAndroid Build Coastguard Workerdescription: 45*7c356e86SAndroid Build Coastguard Worker Check this identifies as legacy shell 46*7c356e86SAndroid Build Coastguard Workerstdin: 47*7c356e86SAndroid Build Coastguard Worker echo "${KSH_VERSION%% *}" 48*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-modern 49*7c356e86SAndroid Build Coastguard Workercategory: !shell:legacy-yes 50*7c356e86SAndroid Build Coastguard Worker--- 51*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 52*7c356e86SAndroid Build Coastguard Worker @(#)LEGACY 53*7c356e86SAndroid Build Coastguard Workerdescription: 54*7c356e86SAndroid Build Coastguard Worker Check this identifies as legacy shell 55*7c356e86SAndroid Build Coastguard Workerstdin: 56*7c356e86SAndroid Build Coastguard Worker echo "${KSH_VERSION%% *}" 57*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-legacy 58*7c356e86SAndroid Build Coastguard Workercategory: !shell:legacy-no 59*7c356e86SAndroid Build Coastguard Worker--- 60*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-ascii 61*7c356e86SAndroid Build Coastguard Workerdescription: 62*7c356e86SAndroid Build Coastguard Worker Check that the shell version tag does not include EBCDIC 63*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes 64*7c356e86SAndroid Build Coastguard Workerstdin: 65*7c356e86SAndroid Build Coastguard Worker set -o noglob 66*7c356e86SAndroid Build Coastguard Worker for x in $KSH_VERSION; do 67*7c356e86SAndroid Build Coastguard Worker [[ $x = '+EBCDIC' ]] && exit 1 68*7c356e86SAndroid Build Coastguard Worker done 69*7c356e86SAndroid Build Coastguard Worker exit 0 70*7c356e86SAndroid Build Coastguard Worker--- 71*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-ebcdic 72*7c356e86SAndroid Build Coastguard Workerdescription: 73*7c356e86SAndroid Build Coastguard Worker Check that the shell version tag includes EBCDIC 74*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no 75*7c356e86SAndroid Build Coastguard Workerstdin: 76*7c356e86SAndroid Build Coastguard Worker set -o noglob 77*7c356e86SAndroid Build Coastguard Worker for x in $KSH_VERSION; do 78*7c356e86SAndroid Build Coastguard Worker [[ $x = '+EBCDIC' ]] && exit 0 79*7c356e86SAndroid Build Coastguard Worker done 80*7c356e86SAndroid Build Coastguard Worker exit 1 81*7c356e86SAndroid Build Coastguard Worker--- 82*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-binmode 83*7c356e86SAndroid Build Coastguard Workerdescription: 84*7c356e86SAndroid Build Coastguard Worker Check that the shell version tag does not include TEXTMODE 85*7c356e86SAndroid Build Coastguard Workercategory: !shell:textmode-yes 86*7c356e86SAndroid Build Coastguard Workerstdin: 87*7c356e86SAndroid Build Coastguard Worker set -o noglob 88*7c356e86SAndroid Build Coastguard Worker for x in $KSH_VERSION; do 89*7c356e86SAndroid Build Coastguard Worker [[ $x = '+TEXTMODE' ]] && exit 1 90*7c356e86SAndroid Build Coastguard Worker done 91*7c356e86SAndroid Build Coastguard Worker exit 0 92*7c356e86SAndroid Build Coastguard Worker--- 93*7c356e86SAndroid Build Coastguard Workername: KSH_VERSION-textmode 94*7c356e86SAndroid Build Coastguard Workerdescription: 95*7c356e86SAndroid Build Coastguard Worker Check that the shell version tag includes TEXTMODE 96*7c356e86SAndroid Build Coastguard Workercategory: !shell:textmode-no 97*7c356e86SAndroid Build Coastguard Workerstdin: 98*7c356e86SAndroid Build Coastguard Worker set -o noglob 99*7c356e86SAndroid Build Coastguard Worker for x in $KSH_VERSION; do 100*7c356e86SAndroid Build Coastguard Worker [[ $x = '+TEXTMODE' ]] && exit 0 101*7c356e86SAndroid Build Coastguard Worker done 102*7c356e86SAndroid Build Coastguard Worker exit 1 103*7c356e86SAndroid Build Coastguard Worker--- 104*7c356e86SAndroid Build Coastguard Workername: selftest-1 105*7c356e86SAndroid Build Coastguard Workerdescription: 106*7c356e86SAndroid Build Coastguard Worker Regression test self-testing 107*7c356e86SAndroid Build Coastguard Workerstdin: 108*7c356e86SAndroid Build Coastguard Worker echo ${foo:-baz} 109*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 110*7c356e86SAndroid Build Coastguard Worker baz 111*7c356e86SAndroid Build Coastguard Worker--- 112*7c356e86SAndroid Build Coastguard Workername: selftest-2 113*7c356e86SAndroid Build Coastguard Workerdescription: 114*7c356e86SAndroid Build Coastguard Worker Regression test self-testing 115*7c356e86SAndroid Build Coastguard Workerenv-setup: !foo=bar! 116*7c356e86SAndroid Build Coastguard Workerstdin: 117*7c356e86SAndroid Build Coastguard Worker echo ${foo:-baz} 118*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 119*7c356e86SAndroid Build Coastguard Worker bar 120*7c356e86SAndroid Build Coastguard Worker--- 121*7c356e86SAndroid Build Coastguard Workername: selftest-3 122*7c356e86SAndroid Build Coastguard Workerdescription: 123*7c356e86SAndroid Build Coastguard Worker Regression test self-testing 124*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=fnord! 125*7c356e86SAndroid Build Coastguard Workerstdin: 126*7c356e86SAndroid Build Coastguard Worker echo "<$ENV>" 127*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 128*7c356e86SAndroid Build Coastguard Worker <fnord> 129*7c356e86SAndroid Build Coastguard Worker--- 130*7c356e86SAndroid Build Coastguard Workername: selftest-exec 131*7c356e86SAndroid Build Coastguard Workerdescription: 132*7c356e86SAndroid Build Coastguard Worker Ensure that the test run directory (default /tmp but can be changed 133*7c356e86SAndroid Build Coastguard Worker with check.pl flag -T or test.sh $TMPDIR) is not mounted noexec, as 134*7c356e86SAndroid Build Coastguard Worker we execute scripts from the scratch directory during several tests. 135*7c356e86SAndroid Build Coastguard Workerstdin: 136*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\necho tf' >lq 137*7c356e86SAndroid Build Coastguard Worker chmod +x lq 138*7c356e86SAndroid Build Coastguard Worker ./lq 139*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 140*7c356e86SAndroid Build Coastguard Worker tf 141*7c356e86SAndroid Build Coastguard Worker--- 142*7c356e86SAndroid Build Coastguard Workername: selftest-env 143*7c356e86SAndroid Build Coastguard Workerdescription: 144*7c356e86SAndroid Build Coastguard Worker Just output the environment variables set (always fails) 145*7c356e86SAndroid Build Coastguard Workercategory: disabled 146*7c356e86SAndroid Build Coastguard Workerstdin: 147*7c356e86SAndroid Build Coastguard Worker set 148*7c356e86SAndroid Build Coastguard Worker--- 149*7c356e86SAndroid Build Coastguard Workername: selftest-direct-builtin-call 150*7c356e86SAndroid Build Coastguard Workerdescription: 151*7c356e86SAndroid Build Coastguard Worker Check that direct builtin calls work 152*7c356e86SAndroid Build Coastguard Workerstdin: 153*7c356e86SAndroid Build Coastguard Worker ln -s "$__progname" cat || cp "$__progname" cat 154*7c356e86SAndroid Build Coastguard Worker ln -s "$__progname" echo || cp "$__progname" echo 155*7c356e86SAndroid Build Coastguard Worker ./echo -c 'echo foo' | ./cat -u 156*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 157*7c356e86SAndroid Build Coastguard Worker -c echo foo 158*7c356e86SAndroid Build Coastguard Worker--- 159*7c356e86SAndroid Build Coastguard Workername: selftest-pathsep-unix 160*7c356e86SAndroid Build Coastguard Workerdescription: 161*7c356e86SAndroid Build Coastguard Worker Check that $PATHSEP is set correctly. 162*7c356e86SAndroid Build Coastguard Workercategory: !os:os2 163*7c356e86SAndroid Build Coastguard Workerstdin: 164*7c356e86SAndroid Build Coastguard Worker PATHSEP=.; export PATHSEP 165*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'print -r -- $PATHSEP' 166*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 167*7c356e86SAndroid Build Coastguard Worker : 168*7c356e86SAndroid Build Coastguard Worker--- 169*7c356e86SAndroid Build Coastguard Workername: selftest-pathsep-dospath 170*7c356e86SAndroid Build Coastguard Workerdescription: 171*7c356e86SAndroid Build Coastguard Worker Check that $PATHSEP is set correctly. 172*7c356e86SAndroid Build Coastguard Workercategory: os:os2 173*7c356e86SAndroid Build Coastguard Workerstdin: 174*7c356e86SAndroid Build Coastguard Worker PATHSEP=.; export PATHSEP 175*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'print -r -- $PATHSEP' 176*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 177*7c356e86SAndroid Build Coastguard Worker ; 178*7c356e86SAndroid Build Coastguard Worker--- 179*7c356e86SAndroid Build Coastguard Workername: selftest-tty-absent 180*7c356e86SAndroid Build Coastguard Workerdescription: 181*7c356e86SAndroid Build Coastguard Worker Check that a controlling tty is not present as regress:no-ctty was used 182*7c356e86SAndroid Build Coastguard Worker (if this test fails for you DO NOT PASS regress:no-ctty and fix every 183*7c356e86SAndroid Build Coastguard Worker other test that fails: why u use it if u haz ctty?) 184*7c356e86SAndroid Build Coastguard Workercategory: regress:no-ctty 185*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./envf! 186*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "envf" 187*7c356e86SAndroid Build Coastguard Worker PS1=X 188*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 189*7c356e86SAndroid Build Coastguard Workerstdin: 190*7c356e86SAndroid Build Coastguard Worker echo ok 191*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 192*7c356e86SAndroid Build Coastguard Worker ok 193*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 194*7c356e86SAndroid Build Coastguard Worker /ksh: warning: won't have full job control\nXX/ 195*7c356e86SAndroid Build Coastguard Worker--- 196*7c356e86SAndroid Build Coastguard Workername: selftest-tty-present 197*7c356e86SAndroid Build Coastguard Workerdescription: 198*7c356e86SAndroid Build Coastguard Worker Check that a controlling tty is present as regress:no-ctty was not used 199*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 200*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./envf! 201*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "envf" 202*7c356e86SAndroid Build Coastguard Worker PS1=X 203*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 204*7c356e86SAndroid Build Coastguard Workerstdin: 205*7c356e86SAndroid Build Coastguard Worker echo ok 206*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 207*7c356e86SAndroid Build Coastguard Worker ok 208*7c356e86SAndroid Build Coastguard Workerexpected-stderr: ! 209*7c356e86SAndroid Build Coastguard Worker XX 210*7c356e86SAndroid Build Coastguard Worker--- 211*7c356e86SAndroid Build Coastguard Workername: alias-1 212*7c356e86SAndroid Build Coastguard Workerdescription: 213*7c356e86SAndroid Build Coastguard Worker Check that recursion is detected/avoided in aliases. 214*7c356e86SAndroid Build Coastguard Workerstdin: 215*7c356e86SAndroid Build Coastguard Worker alias fooBar=fooBar 216*7c356e86SAndroid Build Coastguard Worker fooBar 217*7c356e86SAndroid Build Coastguard Worker exit 0 218*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 219*7c356e86SAndroid Build Coastguard Worker /fooBar.*not found.*/ 220*7c356e86SAndroid Build Coastguard Worker--- 221*7c356e86SAndroid Build Coastguard Workername: alias-2 222*7c356e86SAndroid Build Coastguard Workerdescription: 223*7c356e86SAndroid Build Coastguard Worker Check that recursion is detected/avoided in aliases. 224*7c356e86SAndroid Build Coastguard Workerstdin: 225*7c356e86SAndroid Build Coastguard Worker alias fooBar=barFoo 226*7c356e86SAndroid Build Coastguard Worker alias barFoo=fooBar 227*7c356e86SAndroid Build Coastguard Worker fooBar 228*7c356e86SAndroid Build Coastguard Worker barFoo 229*7c356e86SAndroid Build Coastguard Worker exit 0 230*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 231*7c356e86SAndroid Build Coastguard Worker /fooBar.*not found.*\n.*barFoo.*not found/ 232*7c356e86SAndroid Build Coastguard Worker--- 233*7c356e86SAndroid Build Coastguard Workername: alias-3 234*7c356e86SAndroid Build Coastguard Workerdescription: 235*7c356e86SAndroid Build Coastguard Worker Check that recursion is detected/avoided in aliases. 236*7c356e86SAndroid Build Coastguard Workerstdin: 237*7c356e86SAndroid Build Coastguard Worker alias Echo='echo ' 238*7c356e86SAndroid Build Coastguard Worker alias fooBar=barFoo 239*7c356e86SAndroid Build Coastguard Worker alias barFoo=fooBar 240*7c356e86SAndroid Build Coastguard Worker Echo fooBar 241*7c356e86SAndroid Build Coastguard Worker unalias barFoo 242*7c356e86SAndroid Build Coastguard Worker Echo fooBar 243*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 244*7c356e86SAndroid Build Coastguard Worker fooBar 245*7c356e86SAndroid Build Coastguard Worker barFoo 246*7c356e86SAndroid Build Coastguard Worker--- 247*7c356e86SAndroid Build Coastguard Workername: alias-4 248*7c356e86SAndroid Build Coastguard Workerdescription: 249*7c356e86SAndroid Build Coastguard Worker Check that alias expansion isn't done on keywords (in keyword 250*7c356e86SAndroid Build Coastguard Worker postitions). 251*7c356e86SAndroid Build Coastguard Workerstdin: 252*7c356e86SAndroid Build Coastguard Worker alias Echo='echo ' 253*7c356e86SAndroid Build Coastguard Worker alias while=While 254*7c356e86SAndroid Build Coastguard Worker while false; do echo hi ; done 255*7c356e86SAndroid Build Coastguard Worker Echo while 256*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 257*7c356e86SAndroid Build Coastguard Worker While 258*7c356e86SAndroid Build Coastguard Worker--- 259*7c356e86SAndroid Build Coastguard Workername: alias-5 260*7c356e86SAndroid Build Coastguard Workerdescription: 261*7c356e86SAndroid Build Coastguard Worker Check that alias expansion done after alias with trailing space. 262*7c356e86SAndroid Build Coastguard Workerstdin: 263*7c356e86SAndroid Build Coastguard Worker alias Echo='echo ' 264*7c356e86SAndroid Build Coastguard Worker alias foo='bar stuff ' 265*7c356e86SAndroid Build Coastguard Worker alias bar='Bar1 Bar2 ' 266*7c356e86SAndroid Build Coastguard Worker alias stuff='Stuff' 267*7c356e86SAndroid Build Coastguard Worker alias blah='Blah' 268*7c356e86SAndroid Build Coastguard Worker Echo foo blah 269*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 270*7c356e86SAndroid Build Coastguard Worker Bar1 Bar2 Stuff Blah 271*7c356e86SAndroid Build Coastguard Worker--- 272*7c356e86SAndroid Build Coastguard Workername: alias-6 273*7c356e86SAndroid Build Coastguard Workerdescription: 274*7c356e86SAndroid Build Coastguard Worker Check that alias expansion done after alias with trailing space. 275*7c356e86SAndroid Build Coastguard Workerstdin: 276*7c356e86SAndroid Build Coastguard Worker alias Echo='echo ' 277*7c356e86SAndroid Build Coastguard Worker alias foo='bar bar' 278*7c356e86SAndroid Build Coastguard Worker alias bar='Bar ' 279*7c356e86SAndroid Build Coastguard Worker alias blah=Blah 280*7c356e86SAndroid Build Coastguard Worker Echo foo blah 281*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 282*7c356e86SAndroid Build Coastguard Worker Bar Bar Blah 283*7c356e86SAndroid Build Coastguard Worker--- 284*7c356e86SAndroid Build Coastguard Workername: alias-7 285*7c356e86SAndroid Build Coastguard Workerdescription: 286*7c356e86SAndroid Build Coastguard Worker Check that alias expansion done after alias with trailing space 287*7c356e86SAndroid Build Coastguard Worker after a keyword. 288*7c356e86SAndroid Build Coastguard Workerstdin: 289*7c356e86SAndroid Build Coastguard Worker alias X='case ' 290*7c356e86SAndroid Build Coastguard Worker alias Y=Z 291*7c356e86SAndroid Build Coastguard Worker X Y in 'Y') echo is y ;; Z) echo is z ;; esac 292*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 293*7c356e86SAndroid Build Coastguard Worker is z 294*7c356e86SAndroid Build Coastguard Worker--- 295*7c356e86SAndroid Build Coastguard Workername: alias-8 296*7c356e86SAndroid Build Coastguard Workerdescription: 297*7c356e86SAndroid Build Coastguard Worker Check that newlines in an alias don't cause the command to be lost. 298*7c356e86SAndroid Build Coastguard Workerstdin: 299*7c356e86SAndroid Build Coastguard Worker alias foo=' 300*7c356e86SAndroid Build Coastguard Worker 301*7c356e86SAndroid Build Coastguard Worker 302*7c356e86SAndroid Build Coastguard Worker echo hi 303*7c356e86SAndroid Build Coastguard Worker 304*7c356e86SAndroid Build Coastguard Worker 305*7c356e86SAndroid Build Coastguard Worker 306*7c356e86SAndroid Build Coastguard Worker echo there 307*7c356e86SAndroid Build Coastguard Worker 308*7c356e86SAndroid Build Coastguard Worker 309*7c356e86SAndroid Build Coastguard Worker ' 310*7c356e86SAndroid Build Coastguard Worker foo 311*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 312*7c356e86SAndroid Build Coastguard Worker hi 313*7c356e86SAndroid Build Coastguard Worker there 314*7c356e86SAndroid Build Coastguard Worker--- 315*7c356e86SAndroid Build Coastguard Workername: alias-9 316*7c356e86SAndroid Build Coastguard Workerdescription: 317*7c356e86SAndroid Build Coastguard Worker Check that recursion is detected/avoided in aliases. 318*7c356e86SAndroid Build Coastguard Worker This check fails for slow machines or Cygwin, raise 319*7c356e86SAndroid Build Coastguard Worker the time-limit clause (e.g. to 7) if this occurs. 320*7c356e86SAndroid Build Coastguard Workertime-limit: 3 321*7c356e86SAndroid Build Coastguard Workerstdin: 322*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\necho tf' >lq 323*7c356e86SAndroid Build Coastguard Worker chmod +x lq 324*7c356e86SAndroid Build Coastguard Worker PATH=$PWD$PATHSEP$PATH 325*7c356e86SAndroid Build Coastguard Worker alias lq=lq 326*7c356e86SAndroid Build Coastguard Worker lq 327*7c356e86SAndroid Build Coastguard Worker echo = now 328*7c356e86SAndroid Build Coastguard Worker i=`lq` 329*7c356e86SAndroid Build Coastguard Worker print -r -- $i 330*7c356e86SAndroid Build Coastguard Worker echo = out 331*7c356e86SAndroid Build Coastguard Worker exit 0 332*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 333*7c356e86SAndroid Build Coastguard Worker tf 334*7c356e86SAndroid Build Coastguard Worker = now 335*7c356e86SAndroid Build Coastguard Worker tf 336*7c356e86SAndroid Build Coastguard Worker = out 337*7c356e86SAndroid Build Coastguard Worker--- 338*7c356e86SAndroid Build Coastguard Workername: alias-10 339*7c356e86SAndroid Build Coastguard Workerdescription: 340*7c356e86SAndroid Build Coastguard Worker Check that recursion is detected/avoided in aliases. 341*7c356e86SAndroid Build Coastguard Worker Regression, introduced during an old bugfix. 342*7c356e86SAndroid Build Coastguard Workerstdin: 343*7c356e86SAndroid Build Coastguard Worker alias foo='print hello ' 344*7c356e86SAndroid Build Coastguard Worker alias bar='foo world' 345*7c356e86SAndroid Build Coastguard Worker echo $(bar) 346*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 347*7c356e86SAndroid Build Coastguard Worker hello world 348*7c356e86SAndroid Build Coastguard Worker--- 349*7c356e86SAndroid Build Coastguard Workername: alias-11 350*7c356e86SAndroid Build Coastguard Workerdescription: 351*7c356e86SAndroid Build Coastguard Worker Check that special argument handling still applies with escaped aliases 352*7c356e86SAndroid Build Coastguard Workerstdin: 353*7c356e86SAndroid Build Coastguard Worker alias local1='\typeset' 354*7c356e86SAndroid Build Coastguard Worker alias local2='\\builtin typeset' 355*7c356e86SAndroid Build Coastguard Worker function fooa { 356*7c356e86SAndroid Build Coastguard Worker local1 x=$1 y=z 357*7c356e86SAndroid Build Coastguard Worker print -r -- "$x,$y" 358*7c356e86SAndroid Build Coastguard Worker } 359*7c356e86SAndroid Build Coastguard Worker function foob { 360*7c356e86SAndroid Build Coastguard Worker local2 x=$1 y=z 361*7c356e86SAndroid Build Coastguard Worker print -r -- "$x,$y" 362*7c356e86SAndroid Build Coastguard Worker } 363*7c356e86SAndroid Build Coastguard Worker x=1 y=2; fooa 'bar - baz' 364*7c356e86SAndroid Build Coastguard Worker x=1 y=2; foob 'bar - baz' 365*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 366*7c356e86SAndroid Build Coastguard Worker bar - baz,z 367*7c356e86SAndroid Build Coastguard Worker bar - baz,z 368*7c356e86SAndroid Build Coastguard Worker--- 369*7c356e86SAndroid Build Coastguard Workername: alias-12 370*7c356e86SAndroid Build Coastguard Workerdescription: 371*7c356e86SAndroid Build Coastguard Worker Something weird from Martijn Dekker 372*7c356e86SAndroid Build Coastguard Workerstdin: 373*7c356e86SAndroid Build Coastguard Worker alias echo=print 374*7c356e86SAndroid Build Coastguard Worker x() { echo a; (echo b); x=$(echo c); } 375*7c356e86SAndroid Build Coastguard Worker typeset -f x 376*7c356e86SAndroid Build Coastguard Worker alias OPEN='{' CLOSE='};' 377*7c356e86SAndroid Build Coastguard Worker { OPEN echo hi1; CLOSE } 378*7c356e86SAndroid Build Coastguard Worker var=`{ OPEN echo hi2; CLOSE }` && echo "$var" 379*7c356e86SAndroid Build Coastguard Worker var=$({ OPEN echo hi3; CLOSE }) && echo "$var" 380*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 381*7c356e86SAndroid Build Coastguard Worker x() { 382*7c356e86SAndroid Build Coastguard Worker \print a 383*7c356e86SAndroid Build Coastguard Worker ( \print b ) 384*7c356e86SAndroid Build Coastguard Worker x=$(\print c ) 385*7c356e86SAndroid Build Coastguard Worker } 386*7c356e86SAndroid Build Coastguard Worker hi1 387*7c356e86SAndroid Build Coastguard Worker hi2 388*7c356e86SAndroid Build Coastguard Worker hi3 389*7c356e86SAndroid Build Coastguard Worker--- 390*7c356e86SAndroid Build Coastguard Workername: arith-compound 391*7c356e86SAndroid Build Coastguard Workerdescription: 392*7c356e86SAndroid Build Coastguard Worker Check that arithmetic expressions are compound constructs 393*7c356e86SAndroid Build Coastguard Workerstdin: 394*7c356e86SAndroid Build Coastguard Worker { ! (( 0$(cat >&2) )) <<<1; } <<<2 395*7c356e86SAndroid Build Coastguard Workerexpected-stderr: 396*7c356e86SAndroid Build Coastguard Worker 1 397*7c356e86SAndroid Build Coastguard Worker--- 398*7c356e86SAndroid Build Coastguard Workername: arith-lazy-1 399*7c356e86SAndroid Build Coastguard Workerdescription: 400*7c356e86SAndroid Build Coastguard Worker Check that only one side of ternary operator is evaluated 401*7c356e86SAndroid Build Coastguard Workerstdin: 402*7c356e86SAndroid Build Coastguard Worker x=i+=2 403*7c356e86SAndroid Build Coastguard Worker y=j+=2 404*7c356e86SAndroid Build Coastguard Worker typeset -i i=1 j=1 405*7c356e86SAndroid Build Coastguard Worker echo $((1 ? 20 : (x+=2))) 406*7c356e86SAndroid Build Coastguard Worker echo $i,$x 407*7c356e86SAndroid Build Coastguard Worker echo $((0 ? (y+=2) : 30)) 408*7c356e86SAndroid Build Coastguard Worker echo $j,$y 409*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 410*7c356e86SAndroid Build Coastguard Worker 20 411*7c356e86SAndroid Build Coastguard Worker 1,i+=2 412*7c356e86SAndroid Build Coastguard Worker 30 413*7c356e86SAndroid Build Coastguard Worker 1,j+=2 414*7c356e86SAndroid Build Coastguard Worker--- 415*7c356e86SAndroid Build Coastguard Workername: arith-lazy-2 416*7c356e86SAndroid Build Coastguard Workerdescription: 417*7c356e86SAndroid Build Coastguard Worker Check that assignments not done on non-evaluated side of ternary 418*7c356e86SAndroid Build Coastguard Worker operator 419*7c356e86SAndroid Build Coastguard Workerstdin: 420*7c356e86SAndroid Build Coastguard Worker x=i+=2 421*7c356e86SAndroid Build Coastguard Worker y=j+=2 422*7c356e86SAndroid Build Coastguard Worker typeset -i i=1 j=1 423*7c356e86SAndroid Build Coastguard Worker echo $((1 ? 20 : (x+=2))) 424*7c356e86SAndroid Build Coastguard Worker echo $i,$x 425*7c356e86SAndroid Build Coastguard Worker echo $((0 ? (y+=2) : 30)) 426*7c356e86SAndroid Build Coastguard Worker echo $i,$y 427*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 428*7c356e86SAndroid Build Coastguard Worker 20 429*7c356e86SAndroid Build Coastguard Worker 1,i+=2 430*7c356e86SAndroid Build Coastguard Worker 30 431*7c356e86SAndroid Build Coastguard Worker 1,j+=2 432*7c356e86SAndroid Build Coastguard Worker--- 433*7c356e86SAndroid Build Coastguard Workername: arith-lazy-3 434*7c356e86SAndroid Build Coastguard Workerdescription: 435*7c356e86SAndroid Build Coastguard Worker Check that assignments not done on non-evaluated side of ternary 436*7c356e86SAndroid Build Coastguard Worker operator and this construct is parsed correctly (Debian #445651) 437*7c356e86SAndroid Build Coastguard Workerstdin: 438*7c356e86SAndroid Build Coastguard Worker x=4 439*7c356e86SAndroid Build Coastguard Worker y=$((0 ? x=1 : 2)) 440*7c356e86SAndroid Build Coastguard Worker echo = $x $y = 441*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 442*7c356e86SAndroid Build Coastguard Worker = 4 2 = 443*7c356e86SAndroid Build Coastguard Worker--- 444*7c356e86SAndroid Build Coastguard Workername: arith-lazy-4 445*7c356e86SAndroid Build Coastguard Workerdescription: 446*7c356e86SAndroid Build Coastguard Worker Check that preun/postun not done on non-evaluated side of ternary 447*7c356e86SAndroid Build Coastguard Worker operator 448*7c356e86SAndroid Build Coastguard Workerstdin: 449*7c356e86SAndroid Build Coastguard Worker (( m = n = 0, 1 ? n++ : m++ ? 2 : 3 )) 450*7c356e86SAndroid Build Coastguard Worker echo "($n, $m)" 451*7c356e86SAndroid Build Coastguard Worker m=0; echo $(( 0 ? ++m : 2 )); echo $m 452*7c356e86SAndroid Build Coastguard Worker m=0; echo $(( 0 ? m++ : 2 )); echo $m 453*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 454*7c356e86SAndroid Build Coastguard Worker (1, 0) 455*7c356e86SAndroid Build Coastguard Worker 2 456*7c356e86SAndroid Build Coastguard Worker 0 457*7c356e86SAndroid Build Coastguard Worker 2 458*7c356e86SAndroid Build Coastguard Worker 0 459*7c356e86SAndroid Build Coastguard Worker--- 460*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-arr-n 461*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects 462*7c356e86SAndroid Build Coastguard Workerstdin: 463*7c356e86SAndroid Build Coastguard Worker a=0; echo "$((0&&b[a++],a))" 464*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 465*7c356e86SAndroid Build Coastguard Worker 0 466*7c356e86SAndroid Build Coastguard Worker--- 467*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-arr-p 468*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects 469*7c356e86SAndroid Build Coastguard Workerstdin: 470*7c356e86SAndroid Build Coastguard Worker a=0; echo "$((0&&(b[a++]),a))" 471*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 472*7c356e86SAndroid Build Coastguard Worker 0 473*7c356e86SAndroid Build Coastguard Worker--- 474*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-str-n 475*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects 476*7c356e86SAndroid Build Coastguard Workerstdin: 477*7c356e86SAndroid Build Coastguard Worker a=0 b=a++; ((0&&b)); echo $a 478*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 479*7c356e86SAndroid Build Coastguard Worker 0 480*7c356e86SAndroid Build Coastguard Worker--- 481*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-str-p 482*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects 483*7c356e86SAndroid Build Coastguard Workerstdin: 484*7c356e86SAndroid Build Coastguard Worker a=0 b=a++; ((0&&(b))); echo $a 485*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 486*7c356e86SAndroid Build Coastguard Worker 0 487*7c356e86SAndroid Build Coastguard Worker--- 488*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-tern-l-n 489*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects 490*7c356e86SAndroid Build Coastguard Workerstdin: 491*7c356e86SAndroid Build Coastguard Worker a=0; echo "$((0?b[a++]:999,a))" 492*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 493*7c356e86SAndroid Build Coastguard Worker 0 494*7c356e86SAndroid Build Coastguard Worker--- 495*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-tern-l-p 496*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects 497*7c356e86SAndroid Build Coastguard Workerstdin: 498*7c356e86SAndroid Build Coastguard Worker a=0; echo "$((0?(b[a++]):999,a))" 499*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 500*7c356e86SAndroid Build Coastguard Worker 0 501*7c356e86SAndroid Build Coastguard Worker--- 502*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-tern-r-n 503*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects 504*7c356e86SAndroid Build Coastguard Workerstdin: 505*7c356e86SAndroid Build Coastguard Worker a=0; echo "$((1?999:b[a++],a))" 506*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 507*7c356e86SAndroid Build Coastguard Worker 0 508*7c356e86SAndroid Build Coastguard Worker--- 509*7c356e86SAndroid Build Coastguard Workername: arith-lazy-5-tern-r-p 510*7c356e86SAndroid Build Coastguard Workerdescription: Check lazy evaluation with side effects 511*7c356e86SAndroid Build Coastguard Workerstdin: 512*7c356e86SAndroid Build Coastguard Worker a=0; echo "$((1?999:(b[a++]),a))" 513*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 514*7c356e86SAndroid Build Coastguard Worker 0 515*7c356e86SAndroid Build Coastguard Worker--- 516*7c356e86SAndroid Build Coastguard Workername: arith-ternary-prec-1 517*7c356e86SAndroid Build Coastguard Workerdescription: 518*7c356e86SAndroid Build Coastguard Worker Check precedence of ternary operator vs assignment 519*7c356e86SAndroid Build Coastguard Workerstdin: 520*7c356e86SAndroid Build Coastguard Worker typeset -i x=2 521*7c356e86SAndroid Build Coastguard Worker y=$((1 ? 20 : x+=2)) 522*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 523*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 524*7c356e86SAndroid Build Coastguard Worker /.*:.*1 \? 20 : x\+=2.*lvalue.*\n$/ 525*7c356e86SAndroid Build Coastguard Worker--- 526*7c356e86SAndroid Build Coastguard Workername: arith-ternary-prec-2 527*7c356e86SAndroid Build Coastguard Workerdescription: 528*7c356e86SAndroid Build Coastguard Worker Check precedence of ternary operator vs assignment 529*7c356e86SAndroid Build Coastguard Workerstdin: 530*7c356e86SAndroid Build Coastguard Worker typeset -i x=2 531*7c356e86SAndroid Build Coastguard Worker echo $((0 ? x+=2 : 20)) 532*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 533*7c356e86SAndroid Build Coastguard Worker 20 534*7c356e86SAndroid Build Coastguard Worker--- 535*7c356e86SAndroid Build Coastguard Workername: arith-prec-1 536*7c356e86SAndroid Build Coastguard Workerdescription: 537*7c356e86SAndroid Build Coastguard Worker Prove arithmetic expressions with embedded parameter 538*7c356e86SAndroid Build Coastguard Worker substitutions cannot be parsed ahead of time 539*7c356e86SAndroid Build Coastguard Workerstdin: 540*7c356e86SAndroid Build Coastguard Worker a='3 + 4' 541*7c356e86SAndroid Build Coastguard Worker print 1 $((2 * a)) . 542*7c356e86SAndroid Build Coastguard Worker print 2 $((2 * $a)) . 543*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 544*7c356e86SAndroid Build Coastguard Worker 1 14 . 545*7c356e86SAndroid Build Coastguard Worker 2 10 . 546*7c356e86SAndroid Build Coastguard Worker--- 547*7c356e86SAndroid Build Coastguard Workername: arith-div-assoc-1 548*7c356e86SAndroid Build Coastguard Workerdescription: 549*7c356e86SAndroid Build Coastguard Worker Check associativity of division operator 550*7c356e86SAndroid Build Coastguard Workerstdin: 551*7c356e86SAndroid Build Coastguard Worker echo $((20 / 2 / 2)) 552*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 553*7c356e86SAndroid Build Coastguard Worker 5 554*7c356e86SAndroid Build Coastguard Worker--- 555*7c356e86SAndroid Build Coastguard Workername: arith-div-byzero 556*7c356e86SAndroid Build Coastguard Workerdescription: 557*7c356e86SAndroid Build Coastguard Worker Check division by zero errors out 558*7c356e86SAndroid Build Coastguard Workerstdin: 559*7c356e86SAndroid Build Coastguard Worker x=$(echo $((1 / 0))) 560*7c356e86SAndroid Build Coastguard Worker echo =$?:$x. 561*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 562*7c356e86SAndroid Build Coastguard Worker =1:. 563*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 564*7c356e86SAndroid Build Coastguard Worker /.*divisor/ 565*7c356e86SAndroid Build Coastguard Worker--- 566*7c356e86SAndroid Build Coastguard Workername: arith-div-intmin-by-minusone 567*7c356e86SAndroid Build Coastguard Workerdescription: 568*7c356e86SAndroid Build Coastguard Worker Check division overflow wraps around silently 569*7c356e86SAndroid Build Coastguard Workercategory: int:32 570*7c356e86SAndroid Build Coastguard Workerstdin: 571*7c356e86SAndroid Build Coastguard Worker echo signed:$((-2147483648 / -1))r$((-2147483648 % -1)). 572*7c356e86SAndroid Build Coastguard Worker echo unsigned:$((# -2147483648 / -1))r$((# -2147483648 % -1)). 573*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 574*7c356e86SAndroid Build Coastguard Worker signed:-2147483648r0. 575*7c356e86SAndroid Build Coastguard Worker unsigned:0r2147483648. 576*7c356e86SAndroid Build Coastguard Worker--- 577*7c356e86SAndroid Build Coastguard Workername: arith-div-intmin-by-minusone-64 578*7c356e86SAndroid Build Coastguard Workerdescription: 579*7c356e86SAndroid Build Coastguard Worker Check division overflow wraps around silently 580*7c356e86SAndroid Build Coastguard Workercategory: int:64 581*7c356e86SAndroid Build Coastguard Workerstdin: 582*7c356e86SAndroid Build Coastguard Worker echo signed:$((-9223372036854775808 / -1))r$((-9223372036854775808 % -1)). 583*7c356e86SAndroid Build Coastguard Worker echo unsigned:$((# -9223372036854775808 / -1))r$((# -9223372036854775808 % -1)). 584*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 585*7c356e86SAndroid Build Coastguard Worker signed:-9223372036854775808r0. 586*7c356e86SAndroid Build Coastguard Worker unsigned:0r9223372036854775808. 587*7c356e86SAndroid Build Coastguard Worker--- 588*7c356e86SAndroid Build Coastguard Workername: arith-assop-assoc-1 589*7c356e86SAndroid Build Coastguard Workerdescription: 590*7c356e86SAndroid Build Coastguard Worker Check associativity of assignment-operator operator 591*7c356e86SAndroid Build Coastguard Workerstdin: 592*7c356e86SAndroid Build Coastguard Worker typeset -i i=1 j=2 k=3 593*7c356e86SAndroid Build Coastguard Worker echo $((i += j += k)) 594*7c356e86SAndroid Build Coastguard Worker echo $i,$j,$k 595*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 596*7c356e86SAndroid Build Coastguard Worker 6 597*7c356e86SAndroid Build Coastguard Worker 6,5,3 598*7c356e86SAndroid Build Coastguard Worker--- 599*7c356e86SAndroid Build Coastguard Workername: arith-mandatory 600*7c356e86SAndroid Build Coastguard Workerdescription: 601*7c356e86SAndroid Build Coastguard Worker Passing of this test is *mandatory* for a valid mksh executable! 602*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-no 603*7c356e86SAndroid Build Coastguard Workerstdin: 604*7c356e86SAndroid Build Coastguard Worker typeset -i sari=0 605*7c356e86SAndroid Build Coastguard Worker typeset -Ui uari=0 606*7c356e86SAndroid Build Coastguard Worker typeset -i x=0 607*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #0 608*7c356e86SAndroid Build Coastguard Worker let --sari --uari 609*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #1 610*7c356e86SAndroid Build Coastguard Worker sari=2147483647 uari=2147483647 611*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #2 612*7c356e86SAndroid Build Coastguard Worker let ++sari ++uari 613*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #3 614*7c356e86SAndroid Build Coastguard Worker let --sari --uari 615*7c356e86SAndroid Build Coastguard Worker let 'sari *= 2' 'uari *= 2' 616*7c356e86SAndroid Build Coastguard Worker let ++sari ++uari 617*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #4 618*7c356e86SAndroid Build Coastguard Worker let ++sari ++uari 619*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #5 620*7c356e86SAndroid Build Coastguard Worker sari=-2147483648 uari=-2147483648 621*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #6 622*7c356e86SAndroid Build Coastguard Worker let --sari --uari 623*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #7 624*7c356e86SAndroid Build Coastguard Worker (( sari = -5 >> 1 )) 625*7c356e86SAndroid Build Coastguard Worker ((# uari = -5 >> 1 )) 626*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #8 627*7c356e86SAndroid Build Coastguard Worker (( sari = -2 )) 628*7c356e86SAndroid Build Coastguard Worker ((# uari = sari )) 629*7c356e86SAndroid Build Coastguard Worker print -r -- $((x++)):$sari=$uari. #9 630*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 631*7c356e86SAndroid Build Coastguard Worker 0:0=0. 632*7c356e86SAndroid Build Coastguard Worker 1:-1=4294967295. 633*7c356e86SAndroid Build Coastguard Worker 2:2147483647=2147483647. 634*7c356e86SAndroid Build Coastguard Worker 3:-2147483648=2147483648. 635*7c356e86SAndroid Build Coastguard Worker 4:-1=4294967295. 636*7c356e86SAndroid Build Coastguard Worker 5:0=0. 637*7c356e86SAndroid Build Coastguard Worker 6:-2147483648=2147483648. 638*7c356e86SAndroid Build Coastguard Worker 7:2147483647=2147483647. 639*7c356e86SAndroid Build Coastguard Worker 8:-3=2147483645. 640*7c356e86SAndroid Build Coastguard Worker 9:-2=4294967294. 641*7c356e86SAndroid Build Coastguard Worker--- 642*7c356e86SAndroid Build Coastguard Workername: arith-unsigned-1 643*7c356e86SAndroid Build Coastguard Workerdescription: 644*7c356e86SAndroid Build Coastguard Worker Check if unsigned arithmetics work 645*7c356e86SAndroid Build Coastguard Workercategory: int:32 646*7c356e86SAndroid Build Coastguard Workerstdin: 647*7c356e86SAndroid Build Coastguard Worker # signed vs unsigned 648*7c356e86SAndroid Build Coastguard Worker echo x1 $((-1)) $((#-1)) 649*7c356e86SAndroid Build Coastguard Worker # calculating 650*7c356e86SAndroid Build Coastguard Worker typeset -i vs 651*7c356e86SAndroid Build Coastguard Worker typeset -Ui vu 652*7c356e86SAndroid Build Coastguard Worker vs=4123456789; vu=4123456789 653*7c356e86SAndroid Build Coastguard Worker echo x2 $vs $vu 654*7c356e86SAndroid Build Coastguard Worker (( vs %= 2147483647 )) 655*7c356e86SAndroid Build Coastguard Worker (( vu %= 2147483647 )) 656*7c356e86SAndroid Build Coastguard Worker echo x3 $vs $vu 657*7c356e86SAndroid Build Coastguard Worker vs=4123456789; vu=4123456789 658*7c356e86SAndroid Build Coastguard Worker (( # vs %= 2147483647 )) 659*7c356e86SAndroid Build Coastguard Worker (( # vu %= 2147483647 )) 660*7c356e86SAndroid Build Coastguard Worker echo x4 $vs $vu 661*7c356e86SAndroid Build Coastguard Worker # make sure the calculation does not change unsigned flag 662*7c356e86SAndroid Build Coastguard Worker vs=4123456789; vu=4123456789 663*7c356e86SAndroid Build Coastguard Worker echo x5 $vs $vu 664*7c356e86SAndroid Build Coastguard Worker # short form 665*7c356e86SAndroid Build Coastguard Worker echo x6 $((# vs % 2147483647)) $((# vu % 2147483647)) 666*7c356e86SAndroid Build Coastguard Worker # array refs 667*7c356e86SAndroid Build Coastguard Worker set -A va 668*7c356e86SAndroid Build Coastguard Worker va[1975973142]=right 669*7c356e86SAndroid Build Coastguard Worker va[4123456789]=wrong 670*7c356e86SAndroid Build Coastguard Worker echo x7 ${va[#4123456789%2147483647]} 671*7c356e86SAndroid Build Coastguard Worker # make sure multiple calculations don't interfere with each other 672*7c356e86SAndroid Build Coastguard Worker let '# mca = -4 % -2' ' mcb = -4 % -2' 673*7c356e86SAndroid Build Coastguard Worker echo x8 $mca $mcb 674*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 675*7c356e86SAndroid Build Coastguard Worker x1 -1 4294967295 676*7c356e86SAndroid Build Coastguard Worker x2 -171510507 4123456789 677*7c356e86SAndroid Build Coastguard Worker x3 -171510507 4123456789 678*7c356e86SAndroid Build Coastguard Worker x4 1975973142 1975973142 679*7c356e86SAndroid Build Coastguard Worker x5 -171510507 4123456789 680*7c356e86SAndroid Build Coastguard Worker x6 1975973142 1975973142 681*7c356e86SAndroid Build Coastguard Worker x7 right 682*7c356e86SAndroid Build Coastguard Worker x8 -4 0 683*7c356e86SAndroid Build Coastguard Worker--- 684*7c356e86SAndroid Build Coastguard Workername: arith-limit32-1 685*7c356e86SAndroid Build Coastguard Workerdescription: 686*7c356e86SAndroid Build Coastguard Worker Check if arithmetics are 32 bit 687*7c356e86SAndroid Build Coastguard Workercategory: int:32 688*7c356e86SAndroid Build Coastguard Workerstdin: 689*7c356e86SAndroid Build Coastguard Worker # signed vs unsigned 690*7c356e86SAndroid Build Coastguard Worker echo x1 $((-1)) $((#-1)) 691*7c356e86SAndroid Build Coastguard Worker # calculating 692*7c356e86SAndroid Build Coastguard Worker typeset -i vs 693*7c356e86SAndroid Build Coastguard Worker typeset -Ui vu 694*7c356e86SAndroid Build Coastguard Worker vs=2147483647; vu=2147483647 695*7c356e86SAndroid Build Coastguard Worker echo x2 $vs $vu 696*7c356e86SAndroid Build Coastguard Worker let vs++ vu++ 697*7c356e86SAndroid Build Coastguard Worker echo x3 $vs $vu 698*7c356e86SAndroid Build Coastguard Worker vs=4294967295; vu=4294967295 699*7c356e86SAndroid Build Coastguard Worker echo x4 $vs $vu 700*7c356e86SAndroid Build Coastguard Worker let vs++ vu++ 701*7c356e86SAndroid Build Coastguard Worker echo x5 $vs $vu 702*7c356e86SAndroid Build Coastguard Worker let vs++ vu++ 703*7c356e86SAndroid Build Coastguard Worker echo x6 $vs $vu 704*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 705*7c356e86SAndroid Build Coastguard Worker x1 -1 4294967295 706*7c356e86SAndroid Build Coastguard Worker x2 2147483647 2147483647 707*7c356e86SAndroid Build Coastguard Worker x3 -2147483648 2147483648 708*7c356e86SAndroid Build Coastguard Worker x4 -1 4294967295 709*7c356e86SAndroid Build Coastguard Worker x5 0 0 710*7c356e86SAndroid Build Coastguard Worker x6 1 1 711*7c356e86SAndroid Build Coastguard Worker--- 712*7c356e86SAndroid Build Coastguard Workername: arith-limit64-1 713*7c356e86SAndroid Build Coastguard Workerdescription: 714*7c356e86SAndroid Build Coastguard Worker Check if arithmetics are 64 bit 715*7c356e86SAndroid Build Coastguard Workercategory: int:64 716*7c356e86SAndroid Build Coastguard Workerstdin: 717*7c356e86SAndroid Build Coastguard Worker # signed vs unsigned 718*7c356e86SAndroid Build Coastguard Worker echo x1 $((-1)) $((#-1)) 719*7c356e86SAndroid Build Coastguard Worker # calculating 720*7c356e86SAndroid Build Coastguard Worker typeset -i vs 721*7c356e86SAndroid Build Coastguard Worker typeset -Ui vu 722*7c356e86SAndroid Build Coastguard Worker vs=9223372036854775807; vu=9223372036854775807 723*7c356e86SAndroid Build Coastguard Worker echo x2 $vs $vu 724*7c356e86SAndroid Build Coastguard Worker let vs++ vu++ 725*7c356e86SAndroid Build Coastguard Worker echo x3 $vs $vu 726*7c356e86SAndroid Build Coastguard Worker vs=18446744073709551615; vu=18446744073709551615 727*7c356e86SAndroid Build Coastguard Worker echo x4 $vs $vu 728*7c356e86SAndroid Build Coastguard Worker let vs++ vu++ 729*7c356e86SAndroid Build Coastguard Worker echo x5 $vs $vu 730*7c356e86SAndroid Build Coastguard Worker let vs++ vu++ 731*7c356e86SAndroid Build Coastguard Worker echo x6 $vs $vu 732*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 733*7c356e86SAndroid Build Coastguard Worker x1 -1 18446744073709551615 734*7c356e86SAndroid Build Coastguard Worker x2 9223372036854775807 9223372036854775807 735*7c356e86SAndroid Build Coastguard Worker x3 -9223372036854775808 9223372036854775808 736*7c356e86SAndroid Build Coastguard Worker x4 -1 18446744073709551615 737*7c356e86SAndroid Build Coastguard Worker x5 0 0 738*7c356e86SAndroid Build Coastguard Worker x6 1 1 739*7c356e86SAndroid Build Coastguard Worker--- 740*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-1 741*7c356e86SAndroid Build Coastguard Workerdescription: 742*7c356e86SAndroid Build Coastguard Worker Check that \newline is not collapsed after # 743*7c356e86SAndroid Build Coastguard Workerstdin: 744*7c356e86SAndroid Build Coastguard Worker echo hi #there \ 745*7c356e86SAndroid Build Coastguard Worker echo folks 746*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 747*7c356e86SAndroid Build Coastguard Worker hi 748*7c356e86SAndroid Build Coastguard Worker folks 749*7c356e86SAndroid Build Coastguard Worker--- 750*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-2 751*7c356e86SAndroid Build Coastguard Workerdescription: 752*7c356e86SAndroid Build Coastguard Worker Check that \newline is not collapsed inside single quotes 753*7c356e86SAndroid Build Coastguard Workerstdin: 754*7c356e86SAndroid Build Coastguard Worker echo 'hi \ 755*7c356e86SAndroid Build Coastguard Worker there' 756*7c356e86SAndroid Build Coastguard Worker echo folks 757*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 758*7c356e86SAndroid Build Coastguard Worker hi \ 759*7c356e86SAndroid Build Coastguard Worker there 760*7c356e86SAndroid Build Coastguard Worker folks 761*7c356e86SAndroid Build Coastguard Worker--- 762*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-3 763*7c356e86SAndroid Build Coastguard Workerdescription: 764*7c356e86SAndroid Build Coastguard Worker Check that \newline is not collapsed inside single quotes 765*7c356e86SAndroid Build Coastguard Workerstdin: 766*7c356e86SAndroid Build Coastguard Worker cat << \EOF 767*7c356e86SAndroid Build Coastguard Worker hi \ 768*7c356e86SAndroid Build Coastguard Worker there 769*7c356e86SAndroid Build Coastguard Worker EOF 770*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 771*7c356e86SAndroid Build Coastguard Worker hi \ 772*7c356e86SAndroid Build Coastguard Worker there 773*7c356e86SAndroid Build Coastguard Worker--- 774*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-4 775*7c356e86SAndroid Build Coastguard Workerdescription: 776*7c356e86SAndroid Build Coastguard Worker Check interaction of aliases, single quotes and here-documents 777*7c356e86SAndroid Build Coastguard Worker with backslash-newline 778*7c356e86SAndroid Build Coastguard Worker (don't know what POSIX has to say about this) 779*7c356e86SAndroid Build Coastguard Workerstdin: 780*7c356e86SAndroid Build Coastguard Worker a=2 781*7c356e86SAndroid Build Coastguard Worker alias x='echo hi 782*7c356e86SAndroid Build Coastguard Worker cat << "EOF" 783*7c356e86SAndroid Build Coastguard Worker foo\ 784*7c356e86SAndroid Build Coastguard Worker bar 785*7c356e86SAndroid Build Coastguard Worker some' 786*7c356e86SAndroid Build Coastguard Worker x 787*7c356e86SAndroid Build Coastguard Worker more\ 788*7c356e86SAndroid Build Coastguard Worker stuff$a 789*7c356e86SAndroid Build Coastguard Worker EOF 790*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 791*7c356e86SAndroid Build Coastguard Worker hi 792*7c356e86SAndroid Build Coastguard Worker foo\ 793*7c356e86SAndroid Build Coastguard Worker bar 794*7c356e86SAndroid Build Coastguard Worker some 795*7c356e86SAndroid Build Coastguard Worker more\ 796*7c356e86SAndroid Build Coastguard Worker stuff$a 797*7c356e86SAndroid Build Coastguard Worker--- 798*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ign-5 799*7c356e86SAndroid Build Coastguard Workerdescription: 800*7c356e86SAndroid Build Coastguard Worker Check what happens with backslash at end of input 801*7c356e86SAndroid Build Coastguard Worker (the old Bourne shell trashes them; so do we) 802*7c356e86SAndroid Build Coastguard Workerstdin: ! 803*7c356e86SAndroid Build Coastguard Worker echo `echo foo\\`bar 804*7c356e86SAndroid Build Coastguard Worker echo hi\ 805*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 806*7c356e86SAndroid Build Coastguard Worker foobar 807*7c356e86SAndroid Build Coastguard Worker hi 808*7c356e86SAndroid Build Coastguard Worker--- 809*7c356e86SAndroid Build Coastguard Worker# 810*7c356e86SAndroid Build Coastguard Worker# Places \newline should be collapsed 811*7c356e86SAndroid Build Coastguard Worker# 812*7c356e86SAndroid Build Coastguard Workername: bksl-nl-1 813*7c356e86SAndroid Build Coastguard Workerdescription: 814*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed before, in the middle of, and 815*7c356e86SAndroid Build Coastguard Worker after words 816*7c356e86SAndroid Build Coastguard Workerstdin: 817*7c356e86SAndroid Build Coastguard Worker \ 818*7c356e86SAndroid Build Coastguard Worker echo hi\ 819*7c356e86SAndroid Build Coastguard Worker There, \ 820*7c356e86SAndroid Build Coastguard Worker folks 821*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 822*7c356e86SAndroid Build Coastguard Worker hiThere, folks 823*7c356e86SAndroid Build Coastguard Worker--- 824*7c356e86SAndroid Build Coastguard Workername: bksl-nl-2 825*7c356e86SAndroid Build Coastguard Workerdescription: 826*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed in $ sequences 827*7c356e86SAndroid Build Coastguard Worker (ksh93 fails this) 828*7c356e86SAndroid Build Coastguard Workerstdin: 829*7c356e86SAndroid Build Coastguard Worker a=12 830*7c356e86SAndroid Build Coastguard Worker ab=19 831*7c356e86SAndroid Build Coastguard Worker echo $\ 832*7c356e86SAndroid Build Coastguard Worker a 833*7c356e86SAndroid Build Coastguard Worker echo $a\ 834*7c356e86SAndroid Build Coastguard Worker b 835*7c356e86SAndroid Build Coastguard Worker echo $\ 836*7c356e86SAndroid Build Coastguard Worker {a} 837*7c356e86SAndroid Build Coastguard Worker echo ${a\ 838*7c356e86SAndroid Build Coastguard Worker b} 839*7c356e86SAndroid Build Coastguard Worker echo ${ab\ 840*7c356e86SAndroid Build Coastguard Worker } 841*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 842*7c356e86SAndroid Build Coastguard Worker 12 843*7c356e86SAndroid Build Coastguard Worker 19 844*7c356e86SAndroid Build Coastguard Worker 12 845*7c356e86SAndroid Build Coastguard Worker 19 846*7c356e86SAndroid Build Coastguard Worker 19 847*7c356e86SAndroid Build Coastguard Worker--- 848*7c356e86SAndroid Build Coastguard Workername: bksl-nl-3 849*7c356e86SAndroid Build Coastguard Workerdescription: 850*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed in $(..) and `...` sequences 851*7c356e86SAndroid Build Coastguard Worker (ksh93 fails this) 852*7c356e86SAndroid Build Coastguard Workerstdin: 853*7c356e86SAndroid Build Coastguard Worker echo $\ 854*7c356e86SAndroid Build Coastguard Worker (echo foobar1) 855*7c356e86SAndroid Build Coastguard Worker echo $(\ 856*7c356e86SAndroid Build Coastguard Worker echo foobar2) 857*7c356e86SAndroid Build Coastguard Worker echo $(echo foo\ 858*7c356e86SAndroid Build Coastguard Worker bar3) 859*7c356e86SAndroid Build Coastguard Worker echo $(echo foobar4\ 860*7c356e86SAndroid Build Coastguard Worker ) 861*7c356e86SAndroid Build Coastguard Worker echo ` 862*7c356e86SAndroid Build Coastguard Worker echo stuff1` 863*7c356e86SAndroid Build Coastguard Worker echo `echo st\ 864*7c356e86SAndroid Build Coastguard Worker uff2` 865*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 866*7c356e86SAndroid Build Coastguard Worker foobar1 867*7c356e86SAndroid Build Coastguard Worker foobar2 868*7c356e86SAndroid Build Coastguard Worker foobar3 869*7c356e86SAndroid Build Coastguard Worker foobar4 870*7c356e86SAndroid Build Coastguard Worker stuff1 871*7c356e86SAndroid Build Coastguard Worker stuff2 872*7c356e86SAndroid Build Coastguard Worker--- 873*7c356e86SAndroid Build Coastguard Workername: bksl-nl-4 874*7c356e86SAndroid Build Coastguard Workerdescription: 875*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed in $((..)) sequences 876*7c356e86SAndroid Build Coastguard Worker (ksh93 fails this) 877*7c356e86SAndroid Build Coastguard Workerstdin: 878*7c356e86SAndroid Build Coastguard Worker echo $\ 879*7c356e86SAndroid Build Coastguard Worker ((1+2)) 880*7c356e86SAndroid Build Coastguard Worker echo $(\ 881*7c356e86SAndroid Build Coastguard Worker (1+2+3)) 882*7c356e86SAndroid Build Coastguard Worker echo $((\ 883*7c356e86SAndroid Build Coastguard Worker 1+2+3+4)) 884*7c356e86SAndroid Build Coastguard Worker echo $((1+\ 885*7c356e86SAndroid Build Coastguard Worker 2+3+4+5)) 886*7c356e86SAndroid Build Coastguard Worker echo $((1+2+3+4+5+6)\ 887*7c356e86SAndroid Build Coastguard Worker ) 888*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 889*7c356e86SAndroid Build Coastguard Worker 3 890*7c356e86SAndroid Build Coastguard Worker 6 891*7c356e86SAndroid Build Coastguard Worker 10 892*7c356e86SAndroid Build Coastguard Worker 15 893*7c356e86SAndroid Build Coastguard Worker 21 894*7c356e86SAndroid Build Coastguard Worker--- 895*7c356e86SAndroid Build Coastguard Workername: bksl-nl-5 896*7c356e86SAndroid Build Coastguard Workerdescription: 897*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed in double quoted strings 898*7c356e86SAndroid Build Coastguard Workerstdin: 899*7c356e86SAndroid Build Coastguard Worker echo "\ 900*7c356e86SAndroid Build Coastguard Worker hi" 901*7c356e86SAndroid Build Coastguard Worker echo "foo\ 902*7c356e86SAndroid Build Coastguard Worker bar" 903*7c356e86SAndroid Build Coastguard Worker echo "folks\ 904*7c356e86SAndroid Build Coastguard Worker " 905*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 906*7c356e86SAndroid Build Coastguard Worker hi 907*7c356e86SAndroid Build Coastguard Worker foobar 908*7c356e86SAndroid Build Coastguard Worker folks 909*7c356e86SAndroid Build Coastguard Worker--- 910*7c356e86SAndroid Build Coastguard Workername: bksl-nl-6 911*7c356e86SAndroid Build Coastguard Workerdescription: 912*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed in here document delimiters 913*7c356e86SAndroid Build Coastguard Worker (ksh93 fails second part of this) 914*7c356e86SAndroid Build Coastguard Workerstdin: 915*7c356e86SAndroid Build Coastguard Worker a=12 916*7c356e86SAndroid Build Coastguard Worker cat << EO\ 917*7c356e86SAndroid Build Coastguard Worker F 918*7c356e86SAndroid Build Coastguard Worker a=$a 919*7c356e86SAndroid Build Coastguard Worker foo\ 920*7c356e86SAndroid Build Coastguard Worker bar 921*7c356e86SAndroid Build Coastguard Worker EOF 922*7c356e86SAndroid Build Coastguard Worker cat << E_O_F 923*7c356e86SAndroid Build Coastguard Worker foo 924*7c356e86SAndroid Build Coastguard Worker E_O_\ 925*7c356e86SAndroid Build Coastguard Worker F 926*7c356e86SAndroid Build Coastguard Worker echo done 927*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 928*7c356e86SAndroid Build Coastguard Worker a=12 929*7c356e86SAndroid Build Coastguard Worker foobar 930*7c356e86SAndroid Build Coastguard Worker foo 931*7c356e86SAndroid Build Coastguard Worker done 932*7c356e86SAndroid Build Coastguard Worker--- 933*7c356e86SAndroid Build Coastguard Workername: bksl-nl-7 934*7c356e86SAndroid Build Coastguard Workerdescription: 935*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed in double-quoted here-document 936*7c356e86SAndroid Build Coastguard Worker delimiter. 937*7c356e86SAndroid Build Coastguard Workerstdin: 938*7c356e86SAndroid Build Coastguard Worker a=12 939*7c356e86SAndroid Build Coastguard Worker cat << "EO\ 940*7c356e86SAndroid Build Coastguard Worker F" 941*7c356e86SAndroid Build Coastguard Worker a=$a 942*7c356e86SAndroid Build Coastguard Worker foo\ 943*7c356e86SAndroid Build Coastguard Worker bar 944*7c356e86SAndroid Build Coastguard Worker EOF 945*7c356e86SAndroid Build Coastguard Worker echo done 946*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 947*7c356e86SAndroid Build Coastguard Worker a=$a 948*7c356e86SAndroid Build Coastguard Worker foo\ 949*7c356e86SAndroid Build Coastguard Worker bar 950*7c356e86SAndroid Build Coastguard Worker done 951*7c356e86SAndroid Build Coastguard Worker--- 952*7c356e86SAndroid Build Coastguard Workername: bksl-nl-8 953*7c356e86SAndroid Build Coastguard Workerdescription: 954*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed in various 2+ character tokens 955*7c356e86SAndroid Build Coastguard Worker delimiter. 956*7c356e86SAndroid Build Coastguard Worker (ksh93 fails this) 957*7c356e86SAndroid Build Coastguard Workerstdin: 958*7c356e86SAndroid Build Coastguard Worker echo hi &\ 959*7c356e86SAndroid Build Coastguard Worker & echo there 960*7c356e86SAndroid Build Coastguard Worker echo foo |\ 961*7c356e86SAndroid Build Coastguard Worker | echo bar 962*7c356e86SAndroid Build Coastguard Worker cat <\ 963*7c356e86SAndroid Build Coastguard Worker < EOF 964*7c356e86SAndroid Build Coastguard Worker stuff 965*7c356e86SAndroid Build Coastguard Worker EOF 966*7c356e86SAndroid Build Coastguard Worker cat <\ 967*7c356e86SAndroid Build Coastguard Worker <\ 968*7c356e86SAndroid Build Coastguard Worker - EOF 969*7c356e86SAndroid Build Coastguard Worker more stuff 970*7c356e86SAndroid Build Coastguard Worker EOF 971*7c356e86SAndroid Build Coastguard Worker cat <<\ 972*7c356e86SAndroid Build Coastguard Worker EOF 973*7c356e86SAndroid Build Coastguard Worker abcdef 974*7c356e86SAndroid Build Coastguard Worker EOF 975*7c356e86SAndroid Build Coastguard Worker echo hi >\ 976*7c356e86SAndroid Build Coastguard Worker > /dev/null 977*7c356e86SAndroid Build Coastguard Worker echo $? 978*7c356e86SAndroid Build Coastguard Worker i=1 979*7c356e86SAndroid Build Coastguard Worker case $i in 980*7c356e86SAndroid Build Coastguard Worker (\ 981*7c356e86SAndroid Build Coastguard Worker x|\ 982*7c356e86SAndroid Build Coastguard Worker 1\ 983*7c356e86SAndroid Build Coastguard Worker ) echo hi;\ 984*7c356e86SAndroid Build Coastguard Worker ; 985*7c356e86SAndroid Build Coastguard Worker (*) echo oops 986*7c356e86SAndroid Build Coastguard Worker esac 987*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 988*7c356e86SAndroid Build Coastguard Worker hi 989*7c356e86SAndroid Build Coastguard Worker there 990*7c356e86SAndroid Build Coastguard Worker foo 991*7c356e86SAndroid Build Coastguard Worker stuff 992*7c356e86SAndroid Build Coastguard Worker more stuff 993*7c356e86SAndroid Build Coastguard Worker abcdef 994*7c356e86SAndroid Build Coastguard Worker 0 995*7c356e86SAndroid Build Coastguard Worker hi 996*7c356e86SAndroid Build Coastguard Worker--- 997*7c356e86SAndroid Build Coastguard Workername: bksl-nl-9 998*7c356e86SAndroid Build Coastguard Workerdescription: 999*7c356e86SAndroid Build Coastguard Worker Check that \ at the end of an alias is collapsed when followed 1000*7c356e86SAndroid Build Coastguard Worker by a newline 1001*7c356e86SAndroid Build Coastguard Worker (don't know what POSIX has to say about this) 1002*7c356e86SAndroid Build Coastguard Workerstdin: 1003*7c356e86SAndroid Build Coastguard Worker alias x='echo hi\' 1004*7c356e86SAndroid Build Coastguard Worker x 1005*7c356e86SAndroid Build Coastguard Worker echo there 1006*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1007*7c356e86SAndroid Build Coastguard Worker hiecho there 1008*7c356e86SAndroid Build Coastguard Worker--- 1009*7c356e86SAndroid Build Coastguard Workername: bksl-nl-10 1010*7c356e86SAndroid Build Coastguard Workerdescription: 1011*7c356e86SAndroid Build Coastguard Worker Check that \newline in a keyword is collapsed 1012*7c356e86SAndroid Build Coastguard Workerstdin: 1013*7c356e86SAndroid Build Coastguard Worker i\ 1014*7c356e86SAndroid Build Coastguard Worker f true; then\ 1015*7c356e86SAndroid Build Coastguard Worker echo pass; el\ 1016*7c356e86SAndroid Build Coastguard Worker se echo fail; fi 1017*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1018*7c356e86SAndroid Build Coastguard Worker pass 1019*7c356e86SAndroid Build Coastguard Worker--- 1020*7c356e86SAndroid Build Coastguard Worker# 1021*7c356e86SAndroid Build Coastguard Worker# Places \newline should be collapsed (ksh extensions) 1022*7c356e86SAndroid Build Coastguard Worker# 1023*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ksh-1 1024*7c356e86SAndroid Build Coastguard Workerdescription: 1025*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed in extended globbing 1026*7c356e86SAndroid Build Coastguard Worker (ksh93 fails this) 1027*7c356e86SAndroid Build Coastguard Workerstdin: 1028*7c356e86SAndroid Build Coastguard Worker xxx=foo 1029*7c356e86SAndroid Build Coastguard Worker case $xxx in 1030*7c356e86SAndroid Build Coastguard Worker (f*\ 1031*7c356e86SAndroid Build Coastguard Worker (\ 1032*7c356e86SAndroid Build Coastguard Worker o\ 1033*7c356e86SAndroid Build Coastguard Worker )\ 1034*7c356e86SAndroid Build Coastguard Worker ) echo ok ;; 1035*7c356e86SAndroid Build Coastguard Worker *) echo bad 1036*7c356e86SAndroid Build Coastguard Worker esac 1037*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1038*7c356e86SAndroid Build Coastguard Worker ok 1039*7c356e86SAndroid Build Coastguard Worker--- 1040*7c356e86SAndroid Build Coastguard Workername: bksl-nl-ksh-2 1041*7c356e86SAndroid Build Coastguard Workerdescription: 1042*7c356e86SAndroid Build Coastguard Worker Check that \newline is collapsed in ((...)) expressions 1043*7c356e86SAndroid Build Coastguard Worker (ksh93 fails this) 1044*7c356e86SAndroid Build Coastguard Workerstdin: 1045*7c356e86SAndroid Build Coastguard Worker i=1 1046*7c356e86SAndroid Build Coastguard Worker (\ 1047*7c356e86SAndroid Build Coastguard Worker (\ 1048*7c356e86SAndroid Build Coastguard Worker i=i+2\ 1049*7c356e86SAndroid Build Coastguard Worker )\ 1050*7c356e86SAndroid Build Coastguard Worker ) 1051*7c356e86SAndroid Build Coastguard Worker echo $i 1052*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1053*7c356e86SAndroid Build Coastguard Worker 3 1054*7c356e86SAndroid Build Coastguard Worker--- 1055*7c356e86SAndroid Build Coastguard Workername: break-1 1056*7c356e86SAndroid Build Coastguard Workerdescription: 1057*7c356e86SAndroid Build Coastguard Worker See if break breaks out of loops 1058*7c356e86SAndroid Build Coastguard Workerstdin: 1059*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; break; echo bad-$i; done 1060*7c356e86SAndroid Build Coastguard Worker echo end-1 1061*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; break 1; echo bad-$i; done 1062*7c356e86SAndroid Build Coastguard Worker echo end-2 1063*7c356e86SAndroid Build Coastguard Worker for i in a b c; do 1064*7c356e86SAndroid Build Coastguard Worker for j in x y z; do 1065*7c356e86SAndroid Build Coastguard Worker echo $i:$j 1066*7c356e86SAndroid Build Coastguard Worker break 1067*7c356e86SAndroid Build Coastguard Worker echo bad-$i 1068*7c356e86SAndroid Build Coastguard Worker done 1069*7c356e86SAndroid Build Coastguard Worker echo end-$i 1070*7c356e86SAndroid Build Coastguard Worker done 1071*7c356e86SAndroid Build Coastguard Worker echo end-3 1072*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; eval break; echo bad-$i; done 1073*7c356e86SAndroid Build Coastguard Worker echo end-4 1074*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1075*7c356e86SAndroid Build Coastguard Worker a 1076*7c356e86SAndroid Build Coastguard Worker end-1 1077*7c356e86SAndroid Build Coastguard Worker a 1078*7c356e86SAndroid Build Coastguard Worker end-2 1079*7c356e86SAndroid Build Coastguard Worker a:x 1080*7c356e86SAndroid Build Coastguard Worker end-a 1081*7c356e86SAndroid Build Coastguard Worker b:x 1082*7c356e86SAndroid Build Coastguard Worker end-b 1083*7c356e86SAndroid Build Coastguard Worker c:x 1084*7c356e86SAndroid Build Coastguard Worker end-c 1085*7c356e86SAndroid Build Coastguard Worker end-3 1086*7c356e86SAndroid Build Coastguard Worker a 1087*7c356e86SAndroid Build Coastguard Worker end-4 1088*7c356e86SAndroid Build Coastguard Worker--- 1089*7c356e86SAndroid Build Coastguard Workername: break-2 1090*7c356e86SAndroid Build Coastguard Workerdescription: 1091*7c356e86SAndroid Build Coastguard Worker See if break breaks out of nested loops 1092*7c356e86SAndroid Build Coastguard Workerstdin: 1093*7c356e86SAndroid Build Coastguard Worker for i in a b c; do 1094*7c356e86SAndroid Build Coastguard Worker for j in x y z; do 1095*7c356e86SAndroid Build Coastguard Worker echo $i:$j 1096*7c356e86SAndroid Build Coastguard Worker break 2 1097*7c356e86SAndroid Build Coastguard Worker echo bad-$i 1098*7c356e86SAndroid Build Coastguard Worker done 1099*7c356e86SAndroid Build Coastguard Worker echo end-$i 1100*7c356e86SAndroid Build Coastguard Worker done 1101*7c356e86SAndroid Build Coastguard Worker echo end 1102*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1103*7c356e86SAndroid Build Coastguard Worker a:x 1104*7c356e86SAndroid Build Coastguard Worker end 1105*7c356e86SAndroid Build Coastguard Worker--- 1106*7c356e86SAndroid Build Coastguard Workername: break-3 1107*7c356e86SAndroid Build Coastguard Workerdescription: 1108*7c356e86SAndroid Build Coastguard Worker What if break used outside of any loops 1109*7c356e86SAndroid Build Coastguard Worker (ksh88,ksh93 don't print error messages here) 1110*7c356e86SAndroid Build Coastguard Workerstdin: 1111*7c356e86SAndroid Build Coastguard Worker break 1112*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 1113*7c356e86SAndroid Build Coastguard Worker /.*break.*/ 1114*7c356e86SAndroid Build Coastguard Worker--- 1115*7c356e86SAndroid Build Coastguard Workername: break-4 1116*7c356e86SAndroid Build Coastguard Workerdescription: 1117*7c356e86SAndroid Build Coastguard Worker What if break N used when only N-1 loops 1118*7c356e86SAndroid Build Coastguard Worker (ksh88,ksh93 don't print error messages here) 1119*7c356e86SAndroid Build Coastguard Workerstdin: 1120*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; break 2; echo bad-$i; done 1121*7c356e86SAndroid Build Coastguard Worker echo end 1122*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1123*7c356e86SAndroid Build Coastguard Worker a 1124*7c356e86SAndroid Build Coastguard Worker end 1125*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 1126*7c356e86SAndroid Build Coastguard Worker /.*break.*/ 1127*7c356e86SAndroid Build Coastguard Worker--- 1128*7c356e86SAndroid Build Coastguard Workername: break-5 1129*7c356e86SAndroid Build Coastguard Workerdescription: 1130*7c356e86SAndroid Build Coastguard Worker Error if break argument isn't a number 1131*7c356e86SAndroid Build Coastguard Workerstdin: 1132*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; break abc; echo more-$i; done 1133*7c356e86SAndroid Build Coastguard Worker echo end 1134*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1135*7c356e86SAndroid Build Coastguard Worker a 1136*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 1137*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 1138*7c356e86SAndroid Build Coastguard Worker /.*break.*/ 1139*7c356e86SAndroid Build Coastguard Worker--- 1140*7c356e86SAndroid Build Coastguard Workername: continue-1 1141*7c356e86SAndroid Build Coastguard Workerdescription: 1142*7c356e86SAndroid Build Coastguard Worker See if continue continues loops 1143*7c356e86SAndroid Build Coastguard Workerstdin: 1144*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; continue; echo bad-$i ; done 1145*7c356e86SAndroid Build Coastguard Worker echo end-1 1146*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; continue 1; echo bad-$i; done 1147*7c356e86SAndroid Build Coastguard Worker echo end-2 1148*7c356e86SAndroid Build Coastguard Worker for i in a b c; do 1149*7c356e86SAndroid Build Coastguard Worker for j in x y z; do 1150*7c356e86SAndroid Build Coastguard Worker echo $i:$j 1151*7c356e86SAndroid Build Coastguard Worker continue 1152*7c356e86SAndroid Build Coastguard Worker echo bad-$i-$j 1153*7c356e86SAndroid Build Coastguard Worker done 1154*7c356e86SAndroid Build Coastguard Worker echo end-$i 1155*7c356e86SAndroid Build Coastguard Worker done 1156*7c356e86SAndroid Build Coastguard Worker echo end-3 1157*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; eval continue; echo bad-$i ; done 1158*7c356e86SAndroid Build Coastguard Worker echo end-4 1159*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1160*7c356e86SAndroid Build Coastguard Worker a 1161*7c356e86SAndroid Build Coastguard Worker b 1162*7c356e86SAndroid Build Coastguard Worker c 1163*7c356e86SAndroid Build Coastguard Worker end-1 1164*7c356e86SAndroid Build Coastguard Worker a 1165*7c356e86SAndroid Build Coastguard Worker b 1166*7c356e86SAndroid Build Coastguard Worker c 1167*7c356e86SAndroid Build Coastguard Worker end-2 1168*7c356e86SAndroid Build Coastguard Worker a:x 1169*7c356e86SAndroid Build Coastguard Worker a:y 1170*7c356e86SAndroid Build Coastguard Worker a:z 1171*7c356e86SAndroid Build Coastguard Worker end-a 1172*7c356e86SAndroid Build Coastguard Worker b:x 1173*7c356e86SAndroid Build Coastguard Worker b:y 1174*7c356e86SAndroid Build Coastguard Worker b:z 1175*7c356e86SAndroid Build Coastguard Worker end-b 1176*7c356e86SAndroid Build Coastguard Worker c:x 1177*7c356e86SAndroid Build Coastguard Worker c:y 1178*7c356e86SAndroid Build Coastguard Worker c:z 1179*7c356e86SAndroid Build Coastguard Worker end-c 1180*7c356e86SAndroid Build Coastguard Worker end-3 1181*7c356e86SAndroid Build Coastguard Worker a 1182*7c356e86SAndroid Build Coastguard Worker b 1183*7c356e86SAndroid Build Coastguard Worker c 1184*7c356e86SAndroid Build Coastguard Worker end-4 1185*7c356e86SAndroid Build Coastguard Worker--- 1186*7c356e86SAndroid Build Coastguard Workername: continue-2 1187*7c356e86SAndroid Build Coastguard Workerdescription: 1188*7c356e86SAndroid Build Coastguard Worker See if continue breaks out of nested loops 1189*7c356e86SAndroid Build Coastguard Workerstdin: 1190*7c356e86SAndroid Build Coastguard Worker for i in a b c; do 1191*7c356e86SAndroid Build Coastguard Worker for j in x y z; do 1192*7c356e86SAndroid Build Coastguard Worker echo $i:$j 1193*7c356e86SAndroid Build Coastguard Worker continue 2 1194*7c356e86SAndroid Build Coastguard Worker echo bad-$i-$j 1195*7c356e86SAndroid Build Coastguard Worker done 1196*7c356e86SAndroid Build Coastguard Worker echo end-$i 1197*7c356e86SAndroid Build Coastguard Worker done 1198*7c356e86SAndroid Build Coastguard Worker echo end 1199*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1200*7c356e86SAndroid Build Coastguard Worker a:x 1201*7c356e86SAndroid Build Coastguard Worker b:x 1202*7c356e86SAndroid Build Coastguard Worker c:x 1203*7c356e86SAndroid Build Coastguard Worker end 1204*7c356e86SAndroid Build Coastguard Worker--- 1205*7c356e86SAndroid Build Coastguard Workername: continue-3 1206*7c356e86SAndroid Build Coastguard Workerdescription: 1207*7c356e86SAndroid Build Coastguard Worker What if continue used outside of any loops 1208*7c356e86SAndroid Build Coastguard Worker (ksh88,ksh93 don't print error messages here) 1209*7c356e86SAndroid Build Coastguard Workerstdin: 1210*7c356e86SAndroid Build Coastguard Worker continue 1211*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 1212*7c356e86SAndroid Build Coastguard Worker /.*continue.*/ 1213*7c356e86SAndroid Build Coastguard Worker--- 1214*7c356e86SAndroid Build Coastguard Workername: continue-4 1215*7c356e86SAndroid Build Coastguard Workerdescription: 1216*7c356e86SAndroid Build Coastguard Worker What if continue N used when only N-1 loops 1217*7c356e86SAndroid Build Coastguard Worker (ksh88,ksh93 don't print error messages here) 1218*7c356e86SAndroid Build Coastguard Workerstdin: 1219*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; continue 2; echo bad-$i; done 1220*7c356e86SAndroid Build Coastguard Worker echo end 1221*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1222*7c356e86SAndroid Build Coastguard Worker a 1223*7c356e86SAndroid Build Coastguard Worker b 1224*7c356e86SAndroid Build Coastguard Worker c 1225*7c356e86SAndroid Build Coastguard Worker end 1226*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 1227*7c356e86SAndroid Build Coastguard Worker /.*continue.*/ 1228*7c356e86SAndroid Build Coastguard Worker--- 1229*7c356e86SAndroid Build Coastguard Workername: continue-5 1230*7c356e86SAndroid Build Coastguard Workerdescription: 1231*7c356e86SAndroid Build Coastguard Worker Error if continue argument isn't a number 1232*7c356e86SAndroid Build Coastguard Workerstdin: 1233*7c356e86SAndroid Build Coastguard Worker for i in a b c; do echo $i; continue abc; echo more-$i; done 1234*7c356e86SAndroid Build Coastguard Worker echo end 1235*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1236*7c356e86SAndroid Build Coastguard Worker a 1237*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 1238*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 1239*7c356e86SAndroid Build Coastguard Worker /.*continue.*/ 1240*7c356e86SAndroid Build Coastguard Worker--- 1241*7c356e86SAndroid Build Coastguard Workername: cd-history 1242*7c356e86SAndroid Build Coastguard Workerdescription: 1243*7c356e86SAndroid Build Coastguard Worker Test someone's CD history package (uses arrays) 1244*7c356e86SAndroid Build Coastguard Workerstdin: 1245*7c356e86SAndroid Build Coastguard Worker # go to known place before doing anything 1246*7c356e86SAndroid Build Coastguard Worker cd / 1247*7c356e86SAndroid Build Coastguard Worker 1248*7c356e86SAndroid Build Coastguard Worker alias cd=_cd 1249*7c356e86SAndroid Build Coastguard Worker function _cd 1250*7c356e86SAndroid Build Coastguard Worker { 1251*7c356e86SAndroid Build Coastguard Worker typeset -i cdlen i 1252*7c356e86SAndroid Build Coastguard Worker typeset t 1253*7c356e86SAndroid Build Coastguard Worker 1254*7c356e86SAndroid Build Coastguard Worker if [ $# -eq 0 ] 1255*7c356e86SAndroid Build Coastguard Worker then 1256*7c356e86SAndroid Build Coastguard Worker set -- $HOME 1257*7c356e86SAndroid Build Coastguard Worker fi 1258*7c356e86SAndroid Build Coastguard Worker 1259*7c356e86SAndroid Build Coastguard Worker if [ "$CDHISTFILE" -a -r "$CDHISTFILE" ] # if directory history exists 1260*7c356e86SAndroid Build Coastguard Worker then 1261*7c356e86SAndroid Build Coastguard Worker typeset CDHIST 1262*7c356e86SAndroid Build Coastguard Worker i=-1 1263*7c356e86SAndroid Build Coastguard Worker while read -r t # read directory history file 1264*7c356e86SAndroid Build Coastguard Worker do 1265*7c356e86SAndroid Build Coastguard Worker CDHIST[i=i+1]=$t 1266*7c356e86SAndroid Build Coastguard Worker done <$CDHISTFILE 1267*7c356e86SAndroid Build Coastguard Worker fi 1268*7c356e86SAndroid Build Coastguard Worker 1269*7c356e86SAndroid Build Coastguard Worker if [ "${CDHIST[0]}" != "$PWD" -a "$PWD" != "" ] 1270*7c356e86SAndroid Build Coastguard Worker then 1271*7c356e86SAndroid Build Coastguard Worker _cdins # insert $PWD into cd history 1272*7c356e86SAndroid Build Coastguard Worker fi 1273*7c356e86SAndroid Build Coastguard Worker 1274*7c356e86SAndroid Build Coastguard Worker cdlen=${#CDHIST[*]} # number of elements in history 1275*7c356e86SAndroid Build Coastguard Worker 1276*7c356e86SAndroid Build Coastguard Worker case "$@" in 1277*7c356e86SAndroid Build Coastguard Worker -) # cd to new dir 1278*7c356e86SAndroid Build Coastguard Worker if [ "$OLDPWD" = "" ] && ((cdlen>1)) 1279*7c356e86SAndroid Build Coastguard Worker then 1280*7c356e86SAndroid Build Coastguard Worker 'print' ${CDHIST[1]} 1281*7c356e86SAndroid Build Coastguard Worker 'cd' ${CDHIST[1]} 1282*7c356e86SAndroid Build Coastguard Worker _pwd 1283*7c356e86SAndroid Build Coastguard Worker else 1284*7c356e86SAndroid Build Coastguard Worker 'cd' $@ 1285*7c356e86SAndroid Build Coastguard Worker _pwd 1286*7c356e86SAndroid Build Coastguard Worker fi 1287*7c356e86SAndroid Build Coastguard Worker ;; 1288*7c356e86SAndroid Build Coastguard Worker -l) # print directory list 1289*7c356e86SAndroid Build Coastguard Worker typeset -R3 num 1290*7c356e86SAndroid Build Coastguard Worker ((i=cdlen)) 1291*7c356e86SAndroid Build Coastguard Worker while (((i=i-1)>=0)) 1292*7c356e86SAndroid Build Coastguard Worker do 1293*7c356e86SAndroid Build Coastguard Worker num=$i 1294*7c356e86SAndroid Build Coastguard Worker 'print' "$num ${CDHIST[i]}" 1295*7c356e86SAndroid Build Coastguard Worker done 1296*7c356e86SAndroid Build Coastguard Worker return 1297*7c356e86SAndroid Build Coastguard Worker ;; 1298*7c356e86SAndroid Build Coastguard Worker -[0-9]|-[0-9][0-9]) # cd to dir in list 1299*7c356e86SAndroid Build Coastguard Worker if (((i=${1#-})<cdlen)) 1300*7c356e86SAndroid Build Coastguard Worker then 1301*7c356e86SAndroid Build Coastguard Worker 'print' ${CDHIST[i]} 1302*7c356e86SAndroid Build Coastguard Worker 'cd' ${CDHIST[i]} 1303*7c356e86SAndroid Build Coastguard Worker _pwd 1304*7c356e86SAndroid Build Coastguard Worker else 1305*7c356e86SAndroid Build Coastguard Worker 'cd' $@ 1306*7c356e86SAndroid Build Coastguard Worker _pwd 1307*7c356e86SAndroid Build Coastguard Worker fi 1308*7c356e86SAndroid Build Coastguard Worker ;; 1309*7c356e86SAndroid Build Coastguard Worker -*) # cd to matched dir in list 1310*7c356e86SAndroid Build Coastguard Worker t=${1#-} 1311*7c356e86SAndroid Build Coastguard Worker i=1 1312*7c356e86SAndroid Build Coastguard Worker while ((i<cdlen)) 1313*7c356e86SAndroid Build Coastguard Worker do 1314*7c356e86SAndroid Build Coastguard Worker case ${CDHIST[i]} in 1315*7c356e86SAndroid Build Coastguard Worker *$t*) 1316*7c356e86SAndroid Build Coastguard Worker 'print' ${CDHIST[i]} 1317*7c356e86SAndroid Build Coastguard Worker 'cd' ${CDHIST[i]} 1318*7c356e86SAndroid Build Coastguard Worker _pwd 1319*7c356e86SAndroid Build Coastguard Worker break 1320*7c356e86SAndroid Build Coastguard Worker ;; 1321*7c356e86SAndroid Build Coastguard Worker esac 1322*7c356e86SAndroid Build Coastguard Worker ((i=i+1)) 1323*7c356e86SAndroid Build Coastguard Worker done 1324*7c356e86SAndroid Build Coastguard Worker if ((i>=cdlen)) 1325*7c356e86SAndroid Build Coastguard Worker then 1326*7c356e86SAndroid Build Coastguard Worker 'cd' $@ 1327*7c356e86SAndroid Build Coastguard Worker _pwd 1328*7c356e86SAndroid Build Coastguard Worker fi 1329*7c356e86SAndroid Build Coastguard Worker ;; 1330*7c356e86SAndroid Build Coastguard Worker *) # cd to new dir 1331*7c356e86SAndroid Build Coastguard Worker 'cd' $@ 1332*7c356e86SAndroid Build Coastguard Worker _pwd 1333*7c356e86SAndroid Build Coastguard Worker ;; 1334*7c356e86SAndroid Build Coastguard Worker esac 1335*7c356e86SAndroid Build Coastguard Worker 1336*7c356e86SAndroid Build Coastguard Worker _cdins # insert $PWD into cd history 1337*7c356e86SAndroid Build Coastguard Worker 1338*7c356e86SAndroid Build Coastguard Worker if [ "$CDHISTFILE" ] 1339*7c356e86SAndroid Build Coastguard Worker then 1340*7c356e86SAndroid Build Coastguard Worker cdlen=${#CDHIST[*]} # number of elements in history 1341*7c356e86SAndroid Build Coastguard Worker 1342*7c356e86SAndroid Build Coastguard Worker i=0 1343*7c356e86SAndroid Build Coastguard Worker while ((i<cdlen)) 1344*7c356e86SAndroid Build Coastguard Worker do 1345*7c356e86SAndroid Build Coastguard Worker 'print' -r ${CDHIST[i]} # update directory history 1346*7c356e86SAndroid Build Coastguard Worker ((i=i+1)) 1347*7c356e86SAndroid Build Coastguard Worker done >$CDHISTFILE 1348*7c356e86SAndroid Build Coastguard Worker fi 1349*7c356e86SAndroid Build Coastguard Worker } 1350*7c356e86SAndroid Build Coastguard Worker 1351*7c356e86SAndroid Build Coastguard Worker function _cdins # insert $PWD into cd history 1352*7c356e86SAndroid Build Coastguard Worker { # meant to be called only by _cd 1353*7c356e86SAndroid Build Coastguard Worker typeset -i i 1354*7c356e86SAndroid Build Coastguard Worker 1355*7c356e86SAndroid Build Coastguard Worker ((i=0)) 1356*7c356e86SAndroid Build Coastguard Worker while ((i<${#CDHIST[*]})) # see if dir is already in list 1357*7c356e86SAndroid Build Coastguard Worker do 1358*7c356e86SAndroid Build Coastguard Worker if [ "${CDHIST[$i]}" = "$PWD" ] 1359*7c356e86SAndroid Build Coastguard Worker then 1360*7c356e86SAndroid Build Coastguard Worker break 1361*7c356e86SAndroid Build Coastguard Worker fi 1362*7c356e86SAndroid Build Coastguard Worker ((i=i+1)) 1363*7c356e86SAndroid Build Coastguard Worker done 1364*7c356e86SAndroid Build Coastguard Worker 1365*7c356e86SAndroid Build Coastguard Worker if ((i>22)) # limit max size of list 1366*7c356e86SAndroid Build Coastguard Worker then 1367*7c356e86SAndroid Build Coastguard Worker i=22 1368*7c356e86SAndroid Build Coastguard Worker fi 1369*7c356e86SAndroid Build Coastguard Worker 1370*7c356e86SAndroid Build Coastguard Worker while (((i=i-1)>=0)) # bump old dirs in list 1371*7c356e86SAndroid Build Coastguard Worker do 1372*7c356e86SAndroid Build Coastguard Worker CDHIST[i+1]=${CDHIST[i]} 1373*7c356e86SAndroid Build Coastguard Worker done 1374*7c356e86SAndroid Build Coastguard Worker 1375*7c356e86SAndroid Build Coastguard Worker CDHIST[0]=$PWD # insert new directory in list 1376*7c356e86SAndroid Build Coastguard Worker } 1377*7c356e86SAndroid Build Coastguard Worker 1378*7c356e86SAndroid Build Coastguard Worker 1379*7c356e86SAndroid Build Coastguard Worker function _pwd 1380*7c356e86SAndroid Build Coastguard Worker { 1381*7c356e86SAndroid Build Coastguard Worker if [ -n "$ECD" ] 1382*7c356e86SAndroid Build Coastguard Worker then 1383*7c356e86SAndroid Build Coastguard Worker pwd 1>&6 1384*7c356e86SAndroid Build Coastguard Worker fi 1385*7c356e86SAndroid Build Coastguard Worker } 1386*7c356e86SAndroid Build Coastguard Worker # Start of test 1387*7c356e86SAndroid Build Coastguard Worker cd /tmp 1388*7c356e86SAndroid Build Coastguard Worker cd /bin 1389*7c356e86SAndroid Build Coastguard Worker cd /etc 1390*7c356e86SAndroid Build Coastguard Worker cd - 1391*7c356e86SAndroid Build Coastguard Worker cd -2 1392*7c356e86SAndroid Build Coastguard Worker cd -l 1393*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1394*7c356e86SAndroid Build Coastguard Worker /bin 1395*7c356e86SAndroid Build Coastguard Worker /tmp 1396*7c356e86SAndroid Build Coastguard Worker 3 / 1397*7c356e86SAndroid Build Coastguard Worker 2 /etc 1398*7c356e86SAndroid Build Coastguard Worker 1 /bin 1399*7c356e86SAndroid Build Coastguard Worker 0 /tmp 1400*7c356e86SAndroid Build Coastguard Worker--- 1401*7c356e86SAndroid Build Coastguard Workername: cd-pe 1402*7c356e86SAndroid Build Coastguard Workerdescription: 1403*7c356e86SAndroid Build Coastguard Worker Check package for cd -Pe 1404*7c356e86SAndroid Build Coastguard Workerneed-pass: no 1405*7c356e86SAndroid Build Coastguard Worker# the mv command fails on Cygwin and z/OS 1406*7c356e86SAndroid Build Coastguard Worker# Hurd aborts the testsuite (permission denied) 1407*7c356e86SAndroid Build Coastguard Worker# QNX does not find subdir to cd into 1408*7c356e86SAndroid Build Coastguard Workercategory: !os:cygwin,!os:gnu,!os:midipix,!os:msys,!os:nto,!os:os390,!nosymlink 1409*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "x" 1410*7c356e86SAndroid Build Coastguard Worker mkdir noread noread/target noread/target/subdir 1411*7c356e86SAndroid Build Coastguard Worker ln -s noread link 1412*7c356e86SAndroid Build Coastguard Worker chmod 311 noread 1413*7c356e86SAndroid Build Coastguard Worker cd -P$1 . 1414*7c356e86SAndroid Build Coastguard Worker echo 0=$? 1415*7c356e86SAndroid Build Coastguard Worker bwd=$PWD 1416*7c356e86SAndroid Build Coastguard Worker cd -P$1 link/target 1417*7c356e86SAndroid Build Coastguard Worker echo 1=$?,${PWD#$bwd/} 1418*7c356e86SAndroid Build Coastguard Worker epwd=$($TSHELL -c pwd 2>/dev/null) 1419*7c356e86SAndroid Build Coastguard Worker # This unexpectedly succeeds on GNU/Linux and MidnightBSD 1420*7c356e86SAndroid Build Coastguard Worker #echo pwd=$?,$epwd 1421*7c356e86SAndroid Build Coastguard Worker # expect: pwd=1, 1422*7c356e86SAndroid Build Coastguard Worker mv ../../noread ../../renamed 1423*7c356e86SAndroid Build Coastguard Worker cd -P$1 subdir 1424*7c356e86SAndroid Build Coastguard Worker echo 2=$?,${PWD#$bwd/} 1425*7c356e86SAndroid Build Coastguard Worker cd $bwd 1426*7c356e86SAndroid Build Coastguard Worker chmod 755 noread renamed 2>/dev/null 1427*7c356e86SAndroid Build Coastguard Worker rm -rf noread link renamed 1428*7c356e86SAndroid Build Coastguard Workerstdin: 1429*7c356e86SAndroid Build Coastguard Worker export TSHELL="$__progname" 1430*7c356e86SAndroid Build Coastguard Worker "$__progname" x 1431*7c356e86SAndroid Build Coastguard Worker echo "now with -e:" 1432*7c356e86SAndroid Build Coastguard Worker "$__progname" x e 1433*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1434*7c356e86SAndroid Build Coastguard Worker 0=0 1435*7c356e86SAndroid Build Coastguard Worker 1=0,noread/target 1436*7c356e86SAndroid Build Coastguard Worker 2=0,noread/target/subdir 1437*7c356e86SAndroid Build Coastguard Worker now with -e: 1438*7c356e86SAndroid Build Coastguard Worker 0=0 1439*7c356e86SAndroid Build Coastguard Worker 1=0,noread/target 1440*7c356e86SAndroid Build Coastguard Worker 2=1,noread/target/subdir 1441*7c356e86SAndroid Build Coastguard Worker--- 1442*7c356e86SAndroid Build Coastguard Workername: env-prompt 1443*7c356e86SAndroid Build Coastguard Workerdescription: 1444*7c356e86SAndroid Build Coastguard Worker Check that prompt not printed when processing ENV 1445*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./foo! 1446*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "foo" 1447*7c356e86SAndroid Build Coastguard Worker XXX=_ 1448*7c356e86SAndroid Build Coastguard Worker PS1=X 1449*7c356e86SAndroid Build Coastguard Worker false && echo hmmm 1450*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 1451*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 1452*7c356e86SAndroid Build Coastguard Workerstdin: 1453*7c356e86SAndroid Build Coastguard Worker echo hi${XXX}there 1454*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1455*7c356e86SAndroid Build Coastguard Worker hi_there 1456*7c356e86SAndroid Build Coastguard Workerexpected-stderr: ! 1457*7c356e86SAndroid Build Coastguard Worker XX 1458*7c356e86SAndroid Build Coastguard Worker--- 1459*7c356e86SAndroid Build Coastguard Workername: expand-ugly 1460*7c356e86SAndroid Build Coastguard Workerdescription: 1461*7c356e86SAndroid Build Coastguard Worker Check that weird ${foo+bar} constructs are parsed correctly 1462*7c356e86SAndroid Build Coastguard Workerstdin: 1463*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nfor x in "$@"; do print -r -- "$x"; done' >pfn 1464*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nfor x in "$@"; do print -nr -- "<$x> "; done' >pfs 1465*7c356e86SAndroid Build Coastguard Worker chmod +x pfn pfs 1466*7c356e86SAndroid Build Coastguard Worker (echo 1 ${IFS+'}'z}) 2>/dev/null || echo failed in 1 1467*7c356e86SAndroid Build Coastguard Worker (echo 2 "${IFS+'}'z}") 2>/dev/null || echo failed in 2 1468*7c356e86SAndroid Build Coastguard Worker (echo 3 "foo ${IFS+'bar} baz") 2>/dev/null || echo failed in 3 1469*7c356e86SAndroid Build Coastguard Worker (echo -n '4 '; ./pfn "foo ${IFS+"b c"} baz") 2>/dev/null || echo failed in 4 1470*7c356e86SAndroid Build Coastguard Worker (echo -n '5 '; ./pfn "foo ${IFS+b c} baz") 2>/dev/null || echo failed in 5 1471*7c356e86SAndroid Build Coastguard Worker (echo 6 ${IFS+"}"z}) 2>/dev/null || echo failed in 6 1472*7c356e86SAndroid Build Coastguard Worker (echo 7 "${IFS+"}"z}") 2>/dev/null || echo failed in 7 1473*7c356e86SAndroid Build Coastguard Worker (echo 8 "${IFS+\"}\"z}") 2>/dev/null || echo failed in 8 1474*7c356e86SAndroid Build Coastguard Worker (echo 9 "${IFS+\"\}\"z}") 2>/dev/null || echo failed in 9 1475*7c356e86SAndroid Build Coastguard Worker (echo 10 foo ${IFS+'bar} baz'}) 2>/dev/null || echo failed in 10 1476*7c356e86SAndroid Build Coastguard Worker (echo 11 "$(echo "${IFS+'}'z}")") 2>/dev/null || echo failed in 11 1477*7c356e86SAndroid Build Coastguard Worker (echo 12 "$(echo ${IFS+'}'z})") 2>/dev/null || echo failed in 12 1478*7c356e86SAndroid Build Coastguard Worker (echo 13 ${IFS+\}z}) 2>/dev/null || echo failed in 13 1479*7c356e86SAndroid Build Coastguard Worker (echo 14 "${IFS+\}z}") 2>/dev/null || echo failed in 14 1480*7c356e86SAndroid Build Coastguard Worker u=x; (echo -n '15 '; ./pfs "foo ${IFS+a"b$u{ {"{{\}b} c ${IFS+d{}} bar" ${IFS-e{}} baz; echo .) 2>/dev/null || echo failed in 15 1481*7c356e86SAndroid Build Coastguard Worker l=t; (echo 16 ${IFS+h`echo -n i ${IFS+$l}h`ere}) 2>/dev/null || echo failed in 16 1482*7c356e86SAndroid Build Coastguard Worker l=t; (echo 17 ${IFS+h$(echo -n i ${IFS+$l}h)ere}) 2>/dev/null || echo failed in 17 1483*7c356e86SAndroid Build Coastguard Worker l=t; (echo 18 "${IFS+h`echo -n i ${IFS+$l}h`ere}") 2>/dev/null || echo failed in 18 1484*7c356e86SAndroid Build Coastguard Worker l=t; (echo 19 "${IFS+h$(echo -n i ${IFS+$l}h)ere}") 2>/dev/null || echo failed in 19 1485*7c356e86SAndroid Build Coastguard Worker l=t; (echo 20 ${IFS+h`echo -n i "${IFS+$l}"h`ere}) 2>/dev/null || echo failed in 20 1486*7c356e86SAndroid Build Coastguard Worker l=t; (echo 21 ${IFS+h$(echo -n i "${IFS+$l}"h)ere}) 2>/dev/null || echo failed in 21 1487*7c356e86SAndroid Build Coastguard Worker l=t; (echo 22 "${IFS+h`echo -n i "${IFS+$l}"h`ere}") 2>/dev/null || echo failed in 22 1488*7c356e86SAndroid Build Coastguard Worker l=t; (echo 23 "${IFS+h$(echo -n i "${IFS+$l}"h)ere}") 2>/dev/null || echo failed in 23 1489*7c356e86SAndroid Build Coastguard Worker key=value; (echo -n '24 '; ./pfn "${IFS+'$key'}") 2>/dev/null || echo failed in 24 1490*7c356e86SAndroid Build Coastguard Worker key=value; (echo -n '25 '; ./pfn "${IFS+"'$key'"}") 2>/dev/null || echo failed in 25 # ksh93: “'$key'” 1491*7c356e86SAndroid Build Coastguard Worker key=value; (echo -n '26 '; ./pfn ${IFS+'$key'}) 2>/dev/null || echo failed in 26 1492*7c356e86SAndroid Build Coastguard Worker key=value; (echo -n '27 '; ./pfn ${IFS+"'$key'"}) 2>/dev/null || echo failed in 27 1493*7c356e86SAndroid Build Coastguard Worker (echo -n '28 '; ./pfn "${IFS+"'"x ~ x'}'x"'}"x}" #') 2>/dev/null || echo failed in 28 1494*7c356e86SAndroid Build Coastguard Worker u=x; (echo -n '29 '; ./pfs foo ${IFS+a"b$u{ {"{ {\}b} c ${IFS+d{}} bar ${IFS-e{}} baz; echo .) 2>/dev/null || echo failed in 29 1495*7c356e86SAndroid Build Coastguard Worker (echo -n '30 '; ./pfs ${IFS+foo 'b\ 1496*7c356e86SAndroid Build Coastguard Worker ar' baz}; echo .) 2>/dev/null || (echo failed in 30; echo failed in 31) 1497*7c356e86SAndroid Build Coastguard Worker (echo -n '32 '; ./pfs ${IFS+foo "b\ 1498*7c356e86SAndroid Build Coastguard Worker ar" baz}; echo .) 2>/dev/null || echo failed in 32 1499*7c356e86SAndroid Build Coastguard Worker (echo -n '33 '; ./pfs "${IFS+foo 'b\ 1500*7c356e86SAndroid Build Coastguard Worker ar' baz}"; echo .) 2>/dev/null || echo failed in 33 1501*7c356e86SAndroid Build Coastguard Worker (echo -n '34 '; ./pfs "${IFS+foo "b\ 1502*7c356e86SAndroid Build Coastguard Worker ar" baz}"; echo .) 2>/dev/null || echo failed in 34 1503*7c356e86SAndroid Build Coastguard Worker (echo -n '35 '; ./pfs ${v=a\ b} x ${v=c\ d}; echo .) 2>/dev/null || echo failed in 35 1504*7c356e86SAndroid Build Coastguard Worker (echo -n '36 '; ./pfs "${v=a\ b}" x "${v=c\ d}"; echo .) 2>/dev/null || echo failed in 36 1505*7c356e86SAndroid Build Coastguard Worker (echo -n '37 '; ./pfs ${v-a\ b} x ${v-c\ d}; echo .) 2>/dev/null || echo failed in 37 1506*7c356e86SAndroid Build Coastguard Worker (echo 38 ${IFS+x'a'y} / "${IFS+x'a'y}" .) 2>/dev/null || echo failed in 38 1507*7c356e86SAndroid Build Coastguard Worker foo="x'a'y"; (echo 39 ${foo%*'a'*} / "${foo%*'a'*}" .) 2>/dev/null || echo failed in 39 1508*7c356e86SAndroid Build Coastguard Worker foo="a b c"; (echo -n '40 '; ./pfs "${foo#a}"; echo .) 2>/dev/null || echo failed in 40 1509*7c356e86SAndroid Build Coastguard Worker (foo() { return 100; }; foo; echo 41 ${#+${#:+${#?}}\ \}\}\}}) 2>/dev/null || echo failed in 41 1510*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1511*7c356e86SAndroid Build Coastguard Worker 1 }z 1512*7c356e86SAndroid Build Coastguard Worker 2 ''z} 1513*7c356e86SAndroid Build Coastguard Worker 3 foo 'bar baz 1514*7c356e86SAndroid Build Coastguard Worker 4 foo b c baz 1515*7c356e86SAndroid Build Coastguard Worker 5 foo b c baz 1516*7c356e86SAndroid Build Coastguard Worker 6 }z 1517*7c356e86SAndroid Build Coastguard Worker 7 }z 1518*7c356e86SAndroid Build Coastguard Worker 8 ""z} 1519*7c356e86SAndroid Build Coastguard Worker 9 "}"z 1520*7c356e86SAndroid Build Coastguard Worker 10 foo bar} baz 1521*7c356e86SAndroid Build Coastguard Worker 11 ''z} 1522*7c356e86SAndroid Build Coastguard Worker 12 }z 1523*7c356e86SAndroid Build Coastguard Worker 13 }z 1524*7c356e86SAndroid Build Coastguard Worker 14 }z 1525*7c356e86SAndroid Build Coastguard Worker 15 <foo abx{ {{{}b c d{} bar> <}> <baz> . 1526*7c356e86SAndroid Build Coastguard Worker 16 hi there 1527*7c356e86SAndroid Build Coastguard Worker 17 hi there 1528*7c356e86SAndroid Build Coastguard Worker 18 hi there 1529*7c356e86SAndroid Build Coastguard Worker 19 hi there 1530*7c356e86SAndroid Build Coastguard Worker 20 hi there 1531*7c356e86SAndroid Build Coastguard Worker 21 hi there 1532*7c356e86SAndroid Build Coastguard Worker 22 hi there 1533*7c356e86SAndroid Build Coastguard Worker 23 hi there 1534*7c356e86SAndroid Build Coastguard Worker 24 'value' 1535*7c356e86SAndroid Build Coastguard Worker 25 'value' 1536*7c356e86SAndroid Build Coastguard Worker 26 $key 1537*7c356e86SAndroid Build Coastguard Worker 27 'value' 1538*7c356e86SAndroid Build Coastguard Worker 28 'x ~ x''x}"x}" # 1539*7c356e86SAndroid Build Coastguard Worker 29 <foo> <abx{ {{> <{}b> <c> <d{}> <bar> <}> <baz> . 1540*7c356e86SAndroid Build Coastguard Worker 30 <foo> <b\ 1541*7c356e86SAndroid Build Coastguard Worker ar> <baz> . 1542*7c356e86SAndroid Build Coastguard Worker 32 <foo> <bar> <baz> . 1543*7c356e86SAndroid Build Coastguard Worker 33 <foo 'bar' baz> . 1544*7c356e86SAndroid Build Coastguard Worker 34 <foo bar baz> . 1545*7c356e86SAndroid Build Coastguard Worker 35 <a> <b> <x> <a> <b> . 1546*7c356e86SAndroid Build Coastguard Worker 36 <a\ b> <x> <a\ b> . 1547*7c356e86SAndroid Build Coastguard Worker 37 <a b> <x> <c d> . 1548*7c356e86SAndroid Build Coastguard Worker 38 xay / x'a'y . 1549*7c356e86SAndroid Build Coastguard Worker 39 x' / x' . 1550*7c356e86SAndroid Build Coastguard Worker 40 < b c> . 1551*7c356e86SAndroid Build Coastguard Worker 41 3 }}} 1552*7c356e86SAndroid Build Coastguard Worker--- 1553*7c356e86SAndroid Build Coastguard Workername: expand-unglob-dblq 1554*7c356e86SAndroid Build Coastguard Workerdescription: 1555*7c356e86SAndroid Build Coastguard Worker Check that regular "${foo+bar}" constructs are parsed correctly 1556*7c356e86SAndroid Build Coastguard Workerstdin: 1557*7c356e86SAndroid Build Coastguard Worker u=x 1558*7c356e86SAndroid Build Coastguard Worker tl_norm() { 1559*7c356e86SAndroid Build Coastguard Worker v=$2 1560*7c356e86SAndroid Build Coastguard Worker test x"$v" = x"-" && unset v 1561*7c356e86SAndroid Build Coastguard Worker (echo "$1 plus norm foo ${v+'bar'} baz") 1562*7c356e86SAndroid Build Coastguard Worker (echo "$1 dash norm foo ${v-'bar'} baz") 1563*7c356e86SAndroid Build Coastguard Worker (echo "$1 eqal norm foo ${v='bar'} baz") 1564*7c356e86SAndroid Build Coastguard Worker (echo "$1 qstn norm foo ${v?'bar'} baz") 2>/dev/null || \ 1565*7c356e86SAndroid Build Coastguard Worker echo "$1 qstn norm -> error" 1566*7c356e86SAndroid Build Coastguard Worker (echo "$1 PLUS norm foo ${v:+'bar'} baz") 1567*7c356e86SAndroid Build Coastguard Worker (echo "$1 DASH norm foo ${v:-'bar'} baz") 1568*7c356e86SAndroid Build Coastguard Worker (echo "$1 EQAL norm foo ${v:='bar'} baz") 1569*7c356e86SAndroid Build Coastguard Worker (echo "$1 QSTN norm foo ${v:?'bar'} baz") 2>/dev/null || \ 1570*7c356e86SAndroid Build Coastguard Worker echo "$1 QSTN norm -> error" 1571*7c356e86SAndroid Build Coastguard Worker } 1572*7c356e86SAndroid Build Coastguard Worker tl_paren() { 1573*7c356e86SAndroid Build Coastguard Worker v=$2 1574*7c356e86SAndroid Build Coastguard Worker test x"$v" = x"-" && unset v 1575*7c356e86SAndroid Build Coastguard Worker (echo "$1 plus parn foo ${v+(bar)} baz") 1576*7c356e86SAndroid Build Coastguard Worker (echo "$1 dash parn foo ${v-(bar)} baz") 1577*7c356e86SAndroid Build Coastguard Worker (echo "$1 eqal parn foo ${v=(bar)} baz") 1578*7c356e86SAndroid Build Coastguard Worker (echo "$1 qstn parn foo ${v?(bar)} baz") 2>/dev/null || \ 1579*7c356e86SAndroid Build Coastguard Worker echo "$1 qstn parn -> error" 1580*7c356e86SAndroid Build Coastguard Worker (echo "$1 PLUS parn foo ${v:+(bar)} baz") 1581*7c356e86SAndroid Build Coastguard Worker (echo "$1 DASH parn foo ${v:-(bar)} baz") 1582*7c356e86SAndroid Build Coastguard Worker (echo "$1 EQAL parn foo ${v:=(bar)} baz") 1583*7c356e86SAndroid Build Coastguard Worker (echo "$1 QSTN parn foo ${v:?(bar)} baz") 2>/dev/null || \ 1584*7c356e86SAndroid Build Coastguard Worker echo "$1 QSTN parn -> error" 1585*7c356e86SAndroid Build Coastguard Worker } 1586*7c356e86SAndroid Build Coastguard Worker tl_brace() { 1587*7c356e86SAndroid Build Coastguard Worker v=$2 1588*7c356e86SAndroid Build Coastguard Worker test x"$v" = x"-" && unset v 1589*7c356e86SAndroid Build Coastguard Worker (echo "$1 plus brac foo ${v+a$u{{{\}b} c ${v+d{}} baz") 1590*7c356e86SAndroid Build Coastguard Worker (echo "$1 dash brac foo ${v-a$u{{{\}b} c ${v-d{}} baz") 1591*7c356e86SAndroid Build Coastguard Worker (echo "$1 eqal brac foo ${v=a$u{{{\}b} c ${v=d{}} baz") 1592*7c356e86SAndroid Build Coastguard Worker (echo "$1 qstn brac foo ${v?a$u{{{\}b} c ${v?d{}} baz") 2>/dev/null || \ 1593*7c356e86SAndroid Build Coastguard Worker echo "$1 qstn brac -> error" 1594*7c356e86SAndroid Build Coastguard Worker (echo "$1 PLUS brac foo ${v:+a$u{{{\}b} c ${v:+d{}} baz") 1595*7c356e86SAndroid Build Coastguard Worker (echo "$1 DASH brac foo ${v:-a$u{{{\}b} c ${v:-d{}} baz") 1596*7c356e86SAndroid Build Coastguard Worker (echo "$1 EQAL brac foo ${v:=a$u{{{\}b} c ${v:=d{}} baz") 1597*7c356e86SAndroid Build Coastguard Worker (echo "$1 QSTN brac foo ${v:?a$u{{{\}b} c ${v:?d{}} baz") 2>/dev/null || \ 1598*7c356e86SAndroid Build Coastguard Worker echo "$1 QSTN brac -> error" 1599*7c356e86SAndroid Build Coastguard Worker } 1600*7c356e86SAndroid Build Coastguard Worker : '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' 1601*7c356e86SAndroid Build Coastguard Worker tl_norm 1 - 1602*7c356e86SAndroid Build Coastguard Worker tl_norm 2 '' 1603*7c356e86SAndroid Build Coastguard Worker tl_norm 3 x 1604*7c356e86SAndroid Build Coastguard Worker tl_paren 4 - 1605*7c356e86SAndroid Build Coastguard Worker tl_paren 5 '' 1606*7c356e86SAndroid Build Coastguard Worker tl_paren 6 x 1607*7c356e86SAndroid Build Coastguard Worker tl_brace 7 - 1608*7c356e86SAndroid Build Coastguard Worker tl_brace 8 '' 1609*7c356e86SAndroid Build Coastguard Worker tl_brace 9 x 1610*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1611*7c356e86SAndroid Build Coastguard Worker 1 plus norm foo baz 1612*7c356e86SAndroid Build Coastguard Worker 1 dash norm foo 'bar' baz 1613*7c356e86SAndroid Build Coastguard Worker 1 eqal norm foo 'bar' baz 1614*7c356e86SAndroid Build Coastguard Worker 1 qstn norm -> error 1615*7c356e86SAndroid Build Coastguard Worker 1 PLUS norm foo baz 1616*7c356e86SAndroid Build Coastguard Worker 1 DASH norm foo 'bar' baz 1617*7c356e86SAndroid Build Coastguard Worker 1 EQAL norm foo 'bar' baz 1618*7c356e86SAndroid Build Coastguard Worker 1 QSTN norm -> error 1619*7c356e86SAndroid Build Coastguard Worker 2 plus norm foo 'bar' baz 1620*7c356e86SAndroid Build Coastguard Worker 2 dash norm foo baz 1621*7c356e86SAndroid Build Coastguard Worker 2 eqal norm foo baz 1622*7c356e86SAndroid Build Coastguard Worker 2 qstn norm foo baz 1623*7c356e86SAndroid Build Coastguard Worker 2 PLUS norm foo baz 1624*7c356e86SAndroid Build Coastguard Worker 2 DASH norm foo 'bar' baz 1625*7c356e86SAndroid Build Coastguard Worker 2 EQAL norm foo 'bar' baz 1626*7c356e86SAndroid Build Coastguard Worker 2 QSTN norm -> error 1627*7c356e86SAndroid Build Coastguard Worker 3 plus norm foo 'bar' baz 1628*7c356e86SAndroid Build Coastguard Worker 3 dash norm foo x baz 1629*7c356e86SAndroid Build Coastguard Worker 3 eqal norm foo x baz 1630*7c356e86SAndroid Build Coastguard Worker 3 qstn norm foo x baz 1631*7c356e86SAndroid Build Coastguard Worker 3 PLUS norm foo 'bar' baz 1632*7c356e86SAndroid Build Coastguard Worker 3 DASH norm foo x baz 1633*7c356e86SAndroid Build Coastguard Worker 3 EQAL norm foo x baz 1634*7c356e86SAndroid Build Coastguard Worker 3 QSTN norm foo x baz 1635*7c356e86SAndroid Build Coastguard Worker 4 plus parn foo baz 1636*7c356e86SAndroid Build Coastguard Worker 4 dash parn foo (bar) baz 1637*7c356e86SAndroid Build Coastguard Worker 4 eqal parn foo (bar) baz 1638*7c356e86SAndroid Build Coastguard Worker 4 qstn parn -> error 1639*7c356e86SAndroid Build Coastguard Worker 4 PLUS parn foo baz 1640*7c356e86SAndroid Build Coastguard Worker 4 DASH parn foo (bar) baz 1641*7c356e86SAndroid Build Coastguard Worker 4 EQAL parn foo (bar) baz 1642*7c356e86SAndroid Build Coastguard Worker 4 QSTN parn -> error 1643*7c356e86SAndroid Build Coastguard Worker 5 plus parn foo (bar) baz 1644*7c356e86SAndroid Build Coastguard Worker 5 dash parn foo baz 1645*7c356e86SAndroid Build Coastguard Worker 5 eqal parn foo baz 1646*7c356e86SAndroid Build Coastguard Worker 5 qstn parn foo baz 1647*7c356e86SAndroid Build Coastguard Worker 5 PLUS parn foo baz 1648*7c356e86SAndroid Build Coastguard Worker 5 DASH parn foo (bar) baz 1649*7c356e86SAndroid Build Coastguard Worker 5 EQAL parn foo (bar) baz 1650*7c356e86SAndroid Build Coastguard Worker 5 QSTN parn -> error 1651*7c356e86SAndroid Build Coastguard Worker 6 plus parn foo (bar) baz 1652*7c356e86SAndroid Build Coastguard Worker 6 dash parn foo x baz 1653*7c356e86SAndroid Build Coastguard Worker 6 eqal parn foo x baz 1654*7c356e86SAndroid Build Coastguard Worker 6 qstn parn foo x baz 1655*7c356e86SAndroid Build Coastguard Worker 6 PLUS parn foo (bar) baz 1656*7c356e86SAndroid Build Coastguard Worker 6 DASH parn foo x baz 1657*7c356e86SAndroid Build Coastguard Worker 6 EQAL parn foo x baz 1658*7c356e86SAndroid Build Coastguard Worker 6 QSTN parn foo x baz 1659*7c356e86SAndroid Build Coastguard Worker 7 plus brac foo c } baz 1660*7c356e86SAndroid Build Coastguard Worker 7 dash brac foo ax{{{}b c d{} baz 1661*7c356e86SAndroid Build Coastguard Worker 7 eqal brac foo ax{{{}b c ax{{{}b} baz 1662*7c356e86SAndroid Build Coastguard Worker 7 qstn brac -> error 1663*7c356e86SAndroid Build Coastguard Worker 7 PLUS brac foo c } baz 1664*7c356e86SAndroid Build Coastguard Worker 7 DASH brac foo ax{{{}b c d{} baz 1665*7c356e86SAndroid Build Coastguard Worker 7 EQAL brac foo ax{{{}b c ax{{{}b} baz 1666*7c356e86SAndroid Build Coastguard Worker 7 QSTN brac -> error 1667*7c356e86SAndroid Build Coastguard Worker 8 plus brac foo ax{{{}b c d{} baz 1668*7c356e86SAndroid Build Coastguard Worker 8 dash brac foo c } baz 1669*7c356e86SAndroid Build Coastguard Worker 8 eqal brac foo c } baz 1670*7c356e86SAndroid Build Coastguard Worker 8 qstn brac foo c } baz 1671*7c356e86SAndroid Build Coastguard Worker 8 PLUS brac foo c } baz 1672*7c356e86SAndroid Build Coastguard Worker 8 DASH brac foo ax{{{}b c d{} baz 1673*7c356e86SAndroid Build Coastguard Worker 8 EQAL brac foo ax{{{}b c ax{{{}b} baz 1674*7c356e86SAndroid Build Coastguard Worker 8 QSTN brac -> error 1675*7c356e86SAndroid Build Coastguard Worker 9 plus brac foo ax{{{}b c d{} baz 1676*7c356e86SAndroid Build Coastguard Worker 9 dash brac foo x c x} baz 1677*7c356e86SAndroid Build Coastguard Worker 9 eqal brac foo x c x} baz 1678*7c356e86SAndroid Build Coastguard Worker 9 qstn brac foo x c x} baz 1679*7c356e86SAndroid Build Coastguard Worker 9 PLUS brac foo ax{{{}b c d{} baz 1680*7c356e86SAndroid Build Coastguard Worker 9 DASH brac foo x c x} baz 1681*7c356e86SAndroid Build Coastguard Worker 9 EQAL brac foo x c x} baz 1682*7c356e86SAndroid Build Coastguard Worker 9 QSTN brac foo x c x} baz 1683*7c356e86SAndroid Build Coastguard Worker--- 1684*7c356e86SAndroid Build Coastguard Workername: expand-unglob-unq 1685*7c356e86SAndroid Build Coastguard Workerdescription: 1686*7c356e86SAndroid Build Coastguard Worker Check that regular ${foo+bar} constructs are parsed correctly 1687*7c356e86SAndroid Build Coastguard Workerstdin: 1688*7c356e86SAndroid Build Coastguard Worker u=x 1689*7c356e86SAndroid Build Coastguard Worker tl_norm() { 1690*7c356e86SAndroid Build Coastguard Worker v=$2 1691*7c356e86SAndroid Build Coastguard Worker test x"$v" = x"-" && unset v 1692*7c356e86SAndroid Build Coastguard Worker (echo $1 plus norm foo ${v+'bar'} baz) 1693*7c356e86SAndroid Build Coastguard Worker (echo $1 dash norm foo ${v-'bar'} baz) 1694*7c356e86SAndroid Build Coastguard Worker (echo $1 eqal norm foo ${v='bar'} baz) 1695*7c356e86SAndroid Build Coastguard Worker (echo $1 qstn norm foo ${v?'bar'} baz) 2>/dev/null || \ 1696*7c356e86SAndroid Build Coastguard Worker echo "$1 qstn norm -> error" 1697*7c356e86SAndroid Build Coastguard Worker (echo $1 PLUS norm foo ${v:+'bar'} baz) 1698*7c356e86SAndroid Build Coastguard Worker (echo $1 DASH norm foo ${v:-'bar'} baz) 1699*7c356e86SAndroid Build Coastguard Worker (echo $1 EQAL norm foo ${v:='bar'} baz) 1700*7c356e86SAndroid Build Coastguard Worker (echo $1 QSTN norm foo ${v:?'bar'} baz) 2>/dev/null || \ 1701*7c356e86SAndroid Build Coastguard Worker echo "$1 QSTN norm -> error" 1702*7c356e86SAndroid Build Coastguard Worker } 1703*7c356e86SAndroid Build Coastguard Worker tl_paren() { 1704*7c356e86SAndroid Build Coastguard Worker v=$2 1705*7c356e86SAndroid Build Coastguard Worker test x"$v" = x"-" && unset v 1706*7c356e86SAndroid Build Coastguard Worker (echo $1 plus parn foo ${v+\(bar')'} baz) 1707*7c356e86SAndroid Build Coastguard Worker (echo $1 dash parn foo ${v-\(bar')'} baz) 1708*7c356e86SAndroid Build Coastguard Worker (echo $1 eqal parn foo ${v=\(bar')'} baz) 1709*7c356e86SAndroid Build Coastguard Worker (echo $1 qstn parn foo ${v?\(bar')'} baz) 2>/dev/null || \ 1710*7c356e86SAndroid Build Coastguard Worker echo "$1 qstn parn -> error" 1711*7c356e86SAndroid Build Coastguard Worker (echo $1 PLUS parn foo ${v:+\(bar')'} baz) 1712*7c356e86SAndroid Build Coastguard Worker (echo $1 DASH parn foo ${v:-\(bar')'} baz) 1713*7c356e86SAndroid Build Coastguard Worker (echo $1 EQAL parn foo ${v:=\(bar')'} baz) 1714*7c356e86SAndroid Build Coastguard Worker (echo $1 QSTN parn foo ${v:?\(bar')'} baz) 2>/dev/null || \ 1715*7c356e86SAndroid Build Coastguard Worker echo "$1 QSTN parn -> error" 1716*7c356e86SAndroid Build Coastguard Worker } 1717*7c356e86SAndroid Build Coastguard Worker tl_brace() { 1718*7c356e86SAndroid Build Coastguard Worker v=$2 1719*7c356e86SAndroid Build Coastguard Worker test x"$v" = x"-" && unset v 1720*7c356e86SAndroid Build Coastguard Worker (echo $1 plus brac foo ${v+a$u{{{\}b} c ${v+d{}} baz) 1721*7c356e86SAndroid Build Coastguard Worker (echo $1 dash brac foo ${v-a$u{{{\}b} c ${v-d{}} baz) 1722*7c356e86SAndroid Build Coastguard Worker (echo $1 eqal brac foo ${v=a$u{{{\}b} c ${v=d{}} baz) 1723*7c356e86SAndroid Build Coastguard Worker (echo $1 qstn brac foo ${v?a$u{{{\}b} c ${v?d{}} baz) 2>/dev/null || \ 1724*7c356e86SAndroid Build Coastguard Worker echo "$1 qstn brac -> error" 1725*7c356e86SAndroid Build Coastguard Worker (echo $1 PLUS brac foo ${v:+a$u{{{\}b} c ${v:+d{}} baz) 1726*7c356e86SAndroid Build Coastguard Worker (echo $1 DASH brac foo ${v:-a$u{{{\}b} c ${v:-d{}} baz) 1727*7c356e86SAndroid Build Coastguard Worker (echo $1 EQAL brac foo ${v:=a$u{{{\}b} c ${v:=d{}} baz) 1728*7c356e86SAndroid Build Coastguard Worker (echo $1 QSTN brac foo ${v:?a$u{{{\}b} c ${v:?d{}} baz) 2>/dev/null || \ 1729*7c356e86SAndroid Build Coastguard Worker echo "$1 QSTN brac -> error" 1730*7c356e86SAndroid Build Coastguard Worker } 1731*7c356e86SAndroid Build Coastguard Worker : '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' '}}}' 1732*7c356e86SAndroid Build Coastguard Worker tl_norm 1 - 1733*7c356e86SAndroid Build Coastguard Worker tl_norm 2 '' 1734*7c356e86SAndroid Build Coastguard Worker tl_norm 3 x 1735*7c356e86SAndroid Build Coastguard Worker tl_paren 4 - 1736*7c356e86SAndroid Build Coastguard Worker tl_paren 5 '' 1737*7c356e86SAndroid Build Coastguard Worker tl_paren 6 x 1738*7c356e86SAndroid Build Coastguard Worker tl_brace 7 - 1739*7c356e86SAndroid Build Coastguard Worker tl_brace 8 '' 1740*7c356e86SAndroid Build Coastguard Worker tl_brace 9 x 1741*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1742*7c356e86SAndroid Build Coastguard Worker 1 plus norm foo baz 1743*7c356e86SAndroid Build Coastguard Worker 1 dash norm foo bar baz 1744*7c356e86SAndroid Build Coastguard Worker 1 eqal norm foo bar baz 1745*7c356e86SAndroid Build Coastguard Worker 1 qstn norm -> error 1746*7c356e86SAndroid Build Coastguard Worker 1 PLUS norm foo baz 1747*7c356e86SAndroid Build Coastguard Worker 1 DASH norm foo bar baz 1748*7c356e86SAndroid Build Coastguard Worker 1 EQAL norm foo bar baz 1749*7c356e86SAndroid Build Coastguard Worker 1 QSTN norm -> error 1750*7c356e86SAndroid Build Coastguard Worker 2 plus norm foo bar baz 1751*7c356e86SAndroid Build Coastguard Worker 2 dash norm foo baz 1752*7c356e86SAndroid Build Coastguard Worker 2 eqal norm foo baz 1753*7c356e86SAndroid Build Coastguard Worker 2 qstn norm foo baz 1754*7c356e86SAndroid Build Coastguard Worker 2 PLUS norm foo baz 1755*7c356e86SAndroid Build Coastguard Worker 2 DASH norm foo bar baz 1756*7c356e86SAndroid Build Coastguard Worker 2 EQAL norm foo bar baz 1757*7c356e86SAndroid Build Coastguard Worker 2 QSTN norm -> error 1758*7c356e86SAndroid Build Coastguard Worker 3 plus norm foo bar baz 1759*7c356e86SAndroid Build Coastguard Worker 3 dash norm foo x baz 1760*7c356e86SAndroid Build Coastguard Worker 3 eqal norm foo x baz 1761*7c356e86SAndroid Build Coastguard Worker 3 qstn norm foo x baz 1762*7c356e86SAndroid Build Coastguard Worker 3 PLUS norm foo bar baz 1763*7c356e86SAndroid Build Coastguard Worker 3 DASH norm foo x baz 1764*7c356e86SAndroid Build Coastguard Worker 3 EQAL norm foo x baz 1765*7c356e86SAndroid Build Coastguard Worker 3 QSTN norm foo x baz 1766*7c356e86SAndroid Build Coastguard Worker 4 plus parn foo baz 1767*7c356e86SAndroid Build Coastguard Worker 4 dash parn foo (bar) baz 1768*7c356e86SAndroid Build Coastguard Worker 4 eqal parn foo (bar) baz 1769*7c356e86SAndroid Build Coastguard Worker 4 qstn parn -> error 1770*7c356e86SAndroid Build Coastguard Worker 4 PLUS parn foo baz 1771*7c356e86SAndroid Build Coastguard Worker 4 DASH parn foo (bar) baz 1772*7c356e86SAndroid Build Coastguard Worker 4 EQAL parn foo (bar) baz 1773*7c356e86SAndroid Build Coastguard Worker 4 QSTN parn -> error 1774*7c356e86SAndroid Build Coastguard Worker 5 plus parn foo (bar) baz 1775*7c356e86SAndroid Build Coastguard Worker 5 dash parn foo baz 1776*7c356e86SAndroid Build Coastguard Worker 5 eqal parn foo baz 1777*7c356e86SAndroid Build Coastguard Worker 5 qstn parn foo baz 1778*7c356e86SAndroid Build Coastguard Worker 5 PLUS parn foo baz 1779*7c356e86SAndroid Build Coastguard Worker 5 DASH parn foo (bar) baz 1780*7c356e86SAndroid Build Coastguard Worker 5 EQAL parn foo (bar) baz 1781*7c356e86SAndroid Build Coastguard Worker 5 QSTN parn -> error 1782*7c356e86SAndroid Build Coastguard Worker 6 plus parn foo (bar) baz 1783*7c356e86SAndroid Build Coastguard Worker 6 dash parn foo x baz 1784*7c356e86SAndroid Build Coastguard Worker 6 eqal parn foo x baz 1785*7c356e86SAndroid Build Coastguard Worker 6 qstn parn foo x baz 1786*7c356e86SAndroid Build Coastguard Worker 6 PLUS parn foo (bar) baz 1787*7c356e86SAndroid Build Coastguard Worker 6 DASH parn foo x baz 1788*7c356e86SAndroid Build Coastguard Worker 6 EQAL parn foo x baz 1789*7c356e86SAndroid Build Coastguard Worker 6 QSTN parn foo x baz 1790*7c356e86SAndroid Build Coastguard Worker 7 plus brac foo c } baz 1791*7c356e86SAndroid Build Coastguard Worker 7 dash brac foo ax{{{}b c d{} baz 1792*7c356e86SAndroid Build Coastguard Worker 7 eqal brac foo ax{{{}b c ax{{{}b} baz 1793*7c356e86SAndroid Build Coastguard Worker 7 qstn brac -> error 1794*7c356e86SAndroid Build Coastguard Worker 7 PLUS brac foo c } baz 1795*7c356e86SAndroid Build Coastguard Worker 7 DASH brac foo ax{{{}b c d{} baz 1796*7c356e86SAndroid Build Coastguard Worker 7 EQAL brac foo ax{{{}b c ax{{{}b} baz 1797*7c356e86SAndroid Build Coastguard Worker 7 QSTN brac -> error 1798*7c356e86SAndroid Build Coastguard Worker 8 plus brac foo ax{{{}b c d{} baz 1799*7c356e86SAndroid Build Coastguard Worker 8 dash brac foo c } baz 1800*7c356e86SAndroid Build Coastguard Worker 8 eqal brac foo c } baz 1801*7c356e86SAndroid Build Coastguard Worker 8 qstn brac foo c } baz 1802*7c356e86SAndroid Build Coastguard Worker 8 PLUS brac foo c } baz 1803*7c356e86SAndroid Build Coastguard Worker 8 DASH brac foo ax{{{}b c d{} baz 1804*7c356e86SAndroid Build Coastguard Worker 8 EQAL brac foo ax{{{}b c ax{{{}b} baz 1805*7c356e86SAndroid Build Coastguard Worker 8 QSTN brac -> error 1806*7c356e86SAndroid Build Coastguard Worker 9 plus brac foo ax{{{}b c d{} baz 1807*7c356e86SAndroid Build Coastguard Worker 9 dash brac foo x c x} baz 1808*7c356e86SAndroid Build Coastguard Worker 9 eqal brac foo x c x} baz 1809*7c356e86SAndroid Build Coastguard Worker 9 qstn brac foo x c x} baz 1810*7c356e86SAndroid Build Coastguard Worker 9 PLUS brac foo ax{{{}b c d{} baz 1811*7c356e86SAndroid Build Coastguard Worker 9 DASH brac foo x c x} baz 1812*7c356e86SAndroid Build Coastguard Worker 9 EQAL brac foo x c x} baz 1813*7c356e86SAndroid Build Coastguard Worker 9 QSTN brac foo x c x} baz 1814*7c356e86SAndroid Build Coastguard Worker--- 1815*7c356e86SAndroid Build Coastguard Workername: expand-threecolons-dblq 1816*7c356e86SAndroid Build Coastguard Workerdescription: 1817*7c356e86SAndroid Build Coastguard Worker Check for a particular thing that used to segfault 1818*7c356e86SAndroid Build Coastguard Workerstdin: 1819*7c356e86SAndroid Build Coastguard Worker TEST=1234 1820*7c356e86SAndroid Build Coastguard Worker echo "${TEST:1:2:3}" 1821*7c356e86SAndroid Build Coastguard Worker echo $? but still living 1822*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 1823*7c356e86SAndroid Build Coastguard Worker /bad substitution/ 1824*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 1825*7c356e86SAndroid Build Coastguard Worker--- 1826*7c356e86SAndroid Build Coastguard Workername: expand-threecolons-unq 1827*7c356e86SAndroid Build Coastguard Workerdescription: 1828*7c356e86SAndroid Build Coastguard Worker Check for a particular thing that used to not error out 1829*7c356e86SAndroid Build Coastguard Workerstdin: 1830*7c356e86SAndroid Build Coastguard Worker TEST=1234 1831*7c356e86SAndroid Build Coastguard Worker echo ${TEST:1:2:3} 1832*7c356e86SAndroid Build Coastguard Worker echo $? but still living 1833*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 1834*7c356e86SAndroid Build Coastguard Worker /bad substitution/ 1835*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 1836*7c356e86SAndroid Build Coastguard Worker--- 1837*7c356e86SAndroid Build Coastguard Workername: expand-weird-1 1838*7c356e86SAndroid Build Coastguard Workerdescription: 1839*7c356e86SAndroid Build Coastguard Worker Check corner cases of trim expansion vs. $# vs. ${#var} vs. ${var?} 1840*7c356e86SAndroid Build Coastguard Workerstdin: 1841*7c356e86SAndroid Build Coastguard Worker set 1 2 3 4 5 6 7 8 9 10 11 1842*7c356e86SAndroid Build Coastguard Worker echo ${#} # value of $# 1843*7c356e86SAndroid Build Coastguard Worker echo ${##} # length of $# 1844*7c356e86SAndroid Build Coastguard Worker echo ${##1} # $# trimmed 1 1845*7c356e86SAndroid Build Coastguard Worker set 1 2 3 4 5 6 7 8 9 10 11 12 1846*7c356e86SAndroid Build Coastguard Worker echo ${##1} 1847*7c356e86SAndroid Build Coastguard Worker (exit 0) 1848*7c356e86SAndroid Build Coastguard Worker echo $? = ${#?} . 1849*7c356e86SAndroid Build Coastguard Worker (exit 111) 1850*7c356e86SAndroid Build Coastguard Worker echo $? = ${#?} . 1851*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1852*7c356e86SAndroid Build Coastguard Worker 11 1853*7c356e86SAndroid Build Coastguard Worker 2 1854*7c356e86SAndroid Build Coastguard Worker 1 1855*7c356e86SAndroid Build Coastguard Worker 2 1856*7c356e86SAndroid Build Coastguard Worker 0 = 1 . 1857*7c356e86SAndroid Build Coastguard Worker 111 = 3 . 1858*7c356e86SAndroid Build Coastguard Worker--- 1859*7c356e86SAndroid Build Coastguard Workername: expand-weird-2 1860*7c356e86SAndroid Build Coastguard Workerdescription: 1861*7c356e86SAndroid Build Coastguard Worker Check more substitution and extension corner cases 1862*7c356e86SAndroid Build Coastguard Workerstdin: 1863*7c356e86SAndroid Build Coastguard Worker :& set -C; pid=$$; sub=$!; flg=$-; set -- i; exec 3>x.tmp 1864*7c356e86SAndroid Build Coastguard Worker #echo "D: !=$! #=$# \$=$$ -=$- ?=$?" 1865*7c356e86SAndroid Build Coastguard Worker echo >&3 3 = s^${!-word} , ${#-word} , p^${$-word} , f^${--word} , ${?-word} . 1866*7c356e86SAndroid Build Coastguard Worker echo >&3 4 = ${!+word} , ${#+word} , ${$+word} , ${-+word} , ${?+word} . 1867*7c356e86SAndroid Build Coastguard Worker echo >&3 5 = s^${!=word} , ${#=word} , p^${$=word} , f^${-=word} , ${?=word} . 1868*7c356e86SAndroid Build Coastguard Worker echo >&3 6 = s^${!?word} , ${#?word} , p^${$?word} , f^${-?word} , ${??word} . 1869*7c356e86SAndroid Build Coastguard Worker echo >&3 7 = sl^${#!} , ${##} , pl^${#$} , fl^${#-} , ${#?} . 1870*7c356e86SAndroid Build Coastguard Worker echo >&3 8 = sw^${%!} , ${%#} , pw^${%$} , fw^${%-} , ${%?} . 1871*7c356e86SAndroid Build Coastguard Worker echo >&3 9 = ${!!} , s^${!#} , ${!$} , s^${!-} , s^${!?} . 1872*7c356e86SAndroid Build Coastguard Worker echo >&3 10 = s^${!#pattern} , ${##pattern} , p^${$#pattern} , f^${-#pattern} , ${?#pattern} . 1873*7c356e86SAndroid Build Coastguard Worker echo >&3 11 = s^${!%pattern} , ${#%pattern} , p^${$%pattern} , f^${-%pattern} , ${?%pattern} . 1874*7c356e86SAndroid Build Coastguard Worker echo >&3 12 = $# : ${##} , ${##1} . 1875*7c356e86SAndroid Build Coastguard Worker set -- 1876*7c356e86SAndroid Build Coastguard Worker echo >&3 14 = $# : ${##} , ${##1} . 1877*7c356e86SAndroid Build Coastguard Worker set -- 1 2 3 4 5 1878*7c356e86SAndroid Build Coastguard Worker echo >&3 16 = $# : ${##} , ${##1} . 1879*7c356e86SAndroid Build Coastguard Worker set -- 1 2 3 4 5 6 7 8 9 a b c d e 1880*7c356e86SAndroid Build Coastguard Worker echo >&3 18 = $# : ${##} , ${##1} . 1881*7c356e86SAndroid Build Coastguard Worker exec 3>&- 1882*7c356e86SAndroid Build Coastguard Worker <x.tmp sed \ 1883*7c356e86SAndroid Build Coastguard Worker -e "s/ pl^${#pid} / PID /g" -e "s/ sl^${#sub} / SUB /g" -e "s/ fl^${#flg} / FLG /g" \ 1884*7c356e86SAndroid Build Coastguard Worker -e "s/ pw^${%pid} / PID /g" -e "s/ sw^${%sub} / SUB /g" -e "s/ fw^${%flg} / FLG /g" \ 1885*7c356e86SAndroid Build Coastguard Worker -e "s/ p^$pid / PID /g" -e "s/ s^$sub / SUB /g" -e "s/ f^$flg / FLG /g" 1886*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1887*7c356e86SAndroid Build Coastguard Worker 3 = SUB , 1 , PID , FLG , 0 . 1888*7c356e86SAndroid Build Coastguard Worker 4 = word , word , word , word , word . 1889*7c356e86SAndroid Build Coastguard Worker 5 = SUB , 1 , PID , FLG , 0 . 1890*7c356e86SAndroid Build Coastguard Worker 6 = SUB , 1 , PID , FLG , 0 . 1891*7c356e86SAndroid Build Coastguard Worker 7 = SUB , 1 , PID , FLG , 1 . 1892*7c356e86SAndroid Build Coastguard Worker 8 = SUB , 1 , PID , FLG , 1 . 1893*7c356e86SAndroid Build Coastguard Worker 9 = ! , SUB , $ , SUB , SUB . 1894*7c356e86SAndroid Build Coastguard Worker 10 = SUB , 1 , PID , FLG , 0 . 1895*7c356e86SAndroid Build Coastguard Worker 11 = SUB , 1 , PID , FLG , 0 . 1896*7c356e86SAndroid Build Coastguard Worker 12 = 1 : 1 , . 1897*7c356e86SAndroid Build Coastguard Worker 14 = 0 : 1 , 0 . 1898*7c356e86SAndroid Build Coastguard Worker 16 = 5 : 1 , 5 . 1899*7c356e86SAndroid Build Coastguard Worker 18 = 14 : 2 , 4 . 1900*7c356e86SAndroid Build Coastguard Worker--- 1901*7c356e86SAndroid Build Coastguard Workername: expand-weird-3 1902*7c356e86SAndroid Build Coastguard Workerdescription: 1903*7c356e86SAndroid Build Coastguard Worker Check that trimming works with positional parameters (Debian #48453) 1904*7c356e86SAndroid Build Coastguard Workerstdin: 1905*7c356e86SAndroid Build Coastguard Worker A=9999-02 1906*7c356e86SAndroid Build Coastguard Worker B=9999 1907*7c356e86SAndroid Build Coastguard Worker echo 1=${A#$B?}. 1908*7c356e86SAndroid Build Coastguard Worker set -- $A $B 1909*7c356e86SAndroid Build Coastguard Worker echo 2=${1#$2?}. 1910*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1911*7c356e86SAndroid Build Coastguard Worker 1=02. 1912*7c356e86SAndroid Build Coastguard Worker 2=02. 1913*7c356e86SAndroid Build Coastguard Worker--- 1914*7c356e86SAndroid Build Coastguard Workername: expand-weird-4 1915*7c356e86SAndroid Build Coastguard Workerdescription: 1916*7c356e86SAndroid Build Coastguard Worker Check that tilde expansion is enabled in ${x#~} 1917*7c356e86SAndroid Build Coastguard Worker and cases that are modelled after it (${x/~/~}) 1918*7c356e86SAndroid Build Coastguard Workerstdin: 1919*7c356e86SAndroid Build Coastguard Worker HOME=/etc 1920*7c356e86SAndroid Build Coastguard Worker a="~/x" 1921*7c356e86SAndroid Build Coastguard Worker echo "<${a#~}> <${a#\~}> <${b:-~}> <${b:-\~}> <${c:=~}><$c> <${a/~}> <${a/x/~}> <${a/x/\~}>" 1922*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1923*7c356e86SAndroid Build Coastguard Worker <~/x> </x> <~> <\~> <~><~> <~/x> <~//etc> <~/~> 1924*7c356e86SAndroid Build Coastguard Worker--- 1925*7c356e86SAndroid Build Coastguard Workername: expand-bang-1 1926*7c356e86SAndroid Build Coastguard Workerdescription: 1927*7c356e86SAndroid Build Coastguard Worker Check corner case of ${!?} with ! being var vs. op 1928*7c356e86SAndroid Build Coastguard Workerstdin: 1929*7c356e86SAndroid Build Coastguard Worker echo ${!?} 1930*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 1931*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /not set/ 1932*7c356e86SAndroid Build Coastguard Worker--- 1933*7c356e86SAndroid Build Coastguard Workername: expand-bang-2 1934*7c356e86SAndroid Build Coastguard Workerdescription: 1935*7c356e86SAndroid Build Coastguard Worker Check corner case of ${!var} vs. ${var op} with var=! 1936*7c356e86SAndroid Build Coastguard Workerstdin: 1937*7c356e86SAndroid Build Coastguard Worker echo 1 $! . 1938*7c356e86SAndroid Build Coastguard Worker echo 2 ${!#} . 1939*7c356e86SAndroid Build Coastguard Worker echo 3 ${!#[0-9]} . 1940*7c356e86SAndroid Build Coastguard Worker echo 4 ${!-foo} . 1941*7c356e86SAndroid Build Coastguard Worker # get an at least three-digit bg pid 1942*7c356e86SAndroid Build Coastguard Worker while :; do 1943*7c356e86SAndroid Build Coastguard Worker :& 1944*7c356e86SAndroid Build Coastguard Worker x=$! 1945*7c356e86SAndroid Build Coastguard Worker if [[ $x != +([0-9]) ]]; then 1946*7c356e86SAndroid Build Coastguard Worker echo >&2 "cannot test, pid '$x' not numeric" 1947*7c356e86SAndroid Build Coastguard Worker echo >&2 report this with as many details as possible 1948*7c356e86SAndroid Build Coastguard Worker exit 1 1949*7c356e86SAndroid Build Coastguard Worker fi 1950*7c356e86SAndroid Build Coastguard Worker [[ $x = [0-9][0-9][0-9]* ]] && break 1951*7c356e86SAndroid Build Coastguard Worker done 1952*7c356e86SAndroid Build Coastguard Worker y=${x#?} 1953*7c356e86SAndroid Build Coastguard Worker t=$!; [[ $t = $x ]]; echo 5 $? . 1954*7c356e86SAndroid Build Coastguard Worker t=${!#}; [[ $t = $x ]]; echo 6 $? . 1955*7c356e86SAndroid Build Coastguard Worker t=${!#[0-9]}; [[ $t = $y ]]; echo 7 $? . 1956*7c356e86SAndroid Build Coastguard Worker t=${!-foo}; [[ $t = $x ]]; echo 8 $? . 1957*7c356e86SAndroid Build Coastguard Worker t=${!?bar}; [[ $t = $x ]]; echo 9 $? . 1958*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1959*7c356e86SAndroid Build Coastguard Worker 1 . 1960*7c356e86SAndroid Build Coastguard Worker 2 . 1961*7c356e86SAndroid Build Coastguard Worker 3 . 1962*7c356e86SAndroid Build Coastguard Worker 4 foo . 1963*7c356e86SAndroid Build Coastguard Worker 5 0 . 1964*7c356e86SAndroid Build Coastguard Worker 6 0 . 1965*7c356e86SAndroid Build Coastguard Worker 7 0 . 1966*7c356e86SAndroid Build Coastguard Worker 8 0 . 1967*7c356e86SAndroid Build Coastguard Worker 9 0 . 1968*7c356e86SAndroid Build Coastguard Worker--- 1969*7c356e86SAndroid Build Coastguard Workername: expand-number-1 1970*7c356e86SAndroid Build Coastguard Workerdescription: 1971*7c356e86SAndroid Build Coastguard Worker Check that positional arguments do not overflow 1972*7c356e86SAndroid Build Coastguard Workerstdin: 1973*7c356e86SAndroid Build Coastguard Worker echo "1 ${12345678901234567890} ." 1974*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1975*7c356e86SAndroid Build Coastguard Worker 1 . 1976*7c356e86SAndroid Build Coastguard Worker--- 1977*7c356e86SAndroid Build Coastguard Workername: expand-slashes-1 1978*7c356e86SAndroid Build Coastguard Workerdescription: 1979*7c356e86SAndroid Build Coastguard Worker Check that side effects in substring replacement are handled correctly 1980*7c356e86SAndroid Build Coastguard Workerstdin: 1981*7c356e86SAndroid Build Coastguard Worker foo=n1n1n1n2n3 1982*7c356e86SAndroid Build Coastguard Worker i=2 1983*7c356e86SAndroid Build Coastguard Worker n=1 1984*7c356e86SAndroid Build Coastguard Worker echo 1 ${foo//n$((n++))/[$((++i))]} . 1985*7c356e86SAndroid Build Coastguard Worker echo 2 $n , $i . 1986*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 1987*7c356e86SAndroid Build Coastguard Worker 1 [3][3][3]n2n3 . 1988*7c356e86SAndroid Build Coastguard Worker 2 2 , 3 . 1989*7c356e86SAndroid Build Coastguard Worker--- 1990*7c356e86SAndroid Build Coastguard Workername: expand-slashes-2 1991*7c356e86SAndroid Build Coastguard Workerdescription: 1992*7c356e86SAndroid Build Coastguard Worker Check that side effects in substring replacement are handled correctly 1993*7c356e86SAndroid Build Coastguard Workerstdin: 1994*7c356e86SAndroid Build Coastguard Worker foo=n1n1n1n2n3 1995*7c356e86SAndroid Build Coastguard Worker i=2 1996*7c356e86SAndroid Build Coastguard Worker n=1 1997*7c356e86SAndroid Build Coastguard Worker echo 1 ${foo@/n$((n++))/[$((++i))]} . 1998*7c356e86SAndroid Build Coastguard Worker echo 2 $n , $i . 1999*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2000*7c356e86SAndroid Build Coastguard Worker 1 [3]n1n1[4][5] . 2001*7c356e86SAndroid Build Coastguard Worker 2 5 , 5 . 2002*7c356e86SAndroid Build Coastguard Worker--- 2003*7c356e86SAndroid Build Coastguard Workername: expand-slashes-3 2004*7c356e86SAndroid Build Coastguard Workerdescription: 2005*7c356e86SAndroid Build Coastguard Worker Check that we can access the replaced string 2006*7c356e86SAndroid Build Coastguard Workerstdin: 2007*7c356e86SAndroid Build Coastguard Worker foo=n1n1n1n2n3 2008*7c356e86SAndroid Build Coastguard Worker echo 1 ${foo@/n[12]/[$KSH_MATCH]} . 2009*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2010*7c356e86SAndroid Build Coastguard Worker 1 [n1][n1][n1][n2]n3 . 2011*7c356e86SAndroid Build Coastguard Worker--- 2012*7c356e86SAndroid Build Coastguard Workername: eglob-bad-1 2013*7c356e86SAndroid Build Coastguard Workerdescription: 2014*7c356e86SAndroid Build Coastguard Worker Check that globbing isn't done when glob has syntax error 2015*7c356e86SAndroid Build Coastguard Workercategory: !os:cygwin,!os:midipix,!os:msys,!os:os2 2016*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "@(a[b|)c]foo" 2017*7c356e86SAndroid Build Coastguard Workerstdin: 2018*7c356e86SAndroid Build Coastguard Worker echo @(a[b|)c]* 2019*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2020*7c356e86SAndroid Build Coastguard Worker @(a[b|)c]* 2021*7c356e86SAndroid Build Coastguard Worker--- 2022*7c356e86SAndroid Build Coastguard Workername: eglob-bad-2 2023*7c356e86SAndroid Build Coastguard Workerdescription: 2024*7c356e86SAndroid Build Coastguard Worker Check that globbing isn't done when glob has syntax error 2025*7c356e86SAndroid Build Coastguard Worker (AT&T ksh fails this test) 2026*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abcx" 2027*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abcz" 2028*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "bbc" 2029*7c356e86SAndroid Build Coastguard Workerstdin: 2030*7c356e86SAndroid Build Coastguard Worker echo [a*(]*)z 2031*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2032*7c356e86SAndroid Build Coastguard Worker [a*(]*)z 2033*7c356e86SAndroid Build Coastguard Worker--- 2034*7c356e86SAndroid Build Coastguard Workername: eglob-infinite-plus 2035*7c356e86SAndroid Build Coastguard Workerdescription: 2036*7c356e86SAndroid Build Coastguard Worker Check that shell doesn't go into infinite loop expanding +(...) 2037*7c356e86SAndroid Build Coastguard Worker expressions. 2038*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc" 2039*7c356e86SAndroid Build Coastguard Workertime-limit: 3 2040*7c356e86SAndroid Build Coastguard Workerstdin: 2041*7c356e86SAndroid Build Coastguard Worker echo +()c 2042*7c356e86SAndroid Build Coastguard Worker echo +()x 2043*7c356e86SAndroid Build Coastguard Worker echo +(*)c 2044*7c356e86SAndroid Build Coastguard Worker echo +(*)x 2045*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2046*7c356e86SAndroid Build Coastguard Worker +()c 2047*7c356e86SAndroid Build Coastguard Worker +()x 2048*7c356e86SAndroid Build Coastguard Worker abc 2049*7c356e86SAndroid Build Coastguard Worker +(*)x 2050*7c356e86SAndroid Build Coastguard Worker--- 2051*7c356e86SAndroid Build Coastguard Workername: eglob-subst-1 2052*7c356e86SAndroid Build Coastguard Workerdescription: 2053*7c356e86SAndroid Build Coastguard Worker Check that eglobbing isn't done on substitution results 2054*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc" 2055*7c356e86SAndroid Build Coastguard Workerstdin: 2056*7c356e86SAndroid Build Coastguard Worker x='@(*)' 2057*7c356e86SAndroid Build Coastguard Worker echo $x 2058*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2059*7c356e86SAndroid Build Coastguard Worker @(*) 2060*7c356e86SAndroid Build Coastguard Worker--- 2061*7c356e86SAndroid Build Coastguard Workername: eglob-nomatch-1 2062*7c356e86SAndroid Build Coastguard Workerdescription: 2063*7c356e86SAndroid Build Coastguard Worker Check that the pattern doesn't match 2064*7c356e86SAndroid Build Coastguard Workerstdin: 2065*7c356e86SAndroid Build Coastguard Worker echo 1: no-file+(a|b)stuff 2066*7c356e86SAndroid Build Coastguard Worker echo 2: no-file+(a*(c)|b)stuff 2067*7c356e86SAndroid Build Coastguard Worker echo 3: no-file+((((c)))|b)stuff 2068*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2069*7c356e86SAndroid Build Coastguard Worker 1: no-file+(a|b)stuff 2070*7c356e86SAndroid Build Coastguard Worker 2: no-file+(a*(c)|b)stuff 2071*7c356e86SAndroid Build Coastguard Worker 3: no-file+((((c)))|b)stuff 2072*7c356e86SAndroid Build Coastguard Worker--- 2073*7c356e86SAndroid Build Coastguard Workername: eglob-match-1 2074*7c356e86SAndroid Build Coastguard Workerdescription: 2075*7c356e86SAndroid Build Coastguard Worker Check that the pattern matches correctly 2076*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abd" 2077*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "acd" 2078*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abac" 2079*7c356e86SAndroid Build Coastguard Workerstdin: 2080*7c356e86SAndroid Build Coastguard Worker echo 1: a+(b|c)d 2081*7c356e86SAndroid Build Coastguard Worker echo 2: a!(@(b|B))d 2082*7c356e86SAndroid Build Coastguard Worker echo 3: *(a(b|c)) # (...|...) can be used within X(..) 2083*7c356e86SAndroid Build Coastguard Worker echo 4: a[b*(foo|bar)]d # patterns not special inside [...] 2084*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2085*7c356e86SAndroid Build Coastguard Worker 1: abd acd 2086*7c356e86SAndroid Build Coastguard Worker 2: acd 2087*7c356e86SAndroid Build Coastguard Worker 3: abac 2088*7c356e86SAndroid Build Coastguard Worker 4: abd 2089*7c356e86SAndroid Build Coastguard Worker--- 2090*7c356e86SAndroid Build Coastguard Workername: eglob-case-1 2091*7c356e86SAndroid Build Coastguard Workerdescription: 2092*7c356e86SAndroid Build Coastguard Worker Simple negation tests 2093*7c356e86SAndroid Build Coastguard Workerstdin: 2094*7c356e86SAndroid Build Coastguard Worker case foo in !(foo|bar)) echo yes;; *) echo no;; esac 2095*7c356e86SAndroid Build Coastguard Worker case bar in !(foo|bar)) echo yes;; *) echo no;; esac 2096*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2097*7c356e86SAndroid Build Coastguard Worker no 2098*7c356e86SAndroid Build Coastguard Worker no 2099*7c356e86SAndroid Build Coastguard Worker--- 2100*7c356e86SAndroid Build Coastguard Workername: eglob-case-2 2101*7c356e86SAndroid Build Coastguard Workerdescription: 2102*7c356e86SAndroid Build Coastguard Worker Simple kleene tests 2103*7c356e86SAndroid Build Coastguard Workerstdin: 2104*7c356e86SAndroid Build Coastguard Worker case foo in *(a|b[)) echo yes;; *) echo no;; esac 2105*7c356e86SAndroid Build Coastguard Worker case foo in *(a|b[)|f*) echo yes;; *) echo no;; esac 2106*7c356e86SAndroid Build Coastguard Worker case '*(a|b[)' in *(a|b[)) echo yes;; *) echo no;; esac 2107*7c356e86SAndroid Build Coastguard Worker case 'aab[b[ab[a' in *(a|b[)) echo yes;; *) echo no;; esac 2108*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2109*7c356e86SAndroid Build Coastguard Worker no 2110*7c356e86SAndroid Build Coastguard Worker yes 2111*7c356e86SAndroid Build Coastguard Worker no 2112*7c356e86SAndroid Build Coastguard Worker yes 2113*7c356e86SAndroid Build Coastguard Worker--- 2114*7c356e86SAndroid Build Coastguard Workername: eglob-trim-1 2115*7c356e86SAndroid Build Coastguard Workerdescription: 2116*7c356e86SAndroid Build Coastguard Worker Eglobbing in trim expressions... 2117*7c356e86SAndroid Build Coastguard Worker (AT&T ksh fails this - docs say # matches shortest string, ## matches 2118*7c356e86SAndroid Build Coastguard Worker longest...) 2119*7c356e86SAndroid Build Coastguard Workerstdin: 2120*7c356e86SAndroid Build Coastguard Worker x=abcdef 2121*7c356e86SAndroid Build Coastguard Worker echo 1: ${x#a|abc} 2122*7c356e86SAndroid Build Coastguard Worker echo 2: ${x##a|abc} 2123*7c356e86SAndroid Build Coastguard Worker echo 3: ${x%def|f} 2124*7c356e86SAndroid Build Coastguard Worker echo 4: ${x%%f|def} 2125*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2126*7c356e86SAndroid Build Coastguard Worker 1: bcdef 2127*7c356e86SAndroid Build Coastguard Worker 2: def 2128*7c356e86SAndroid Build Coastguard Worker 3: abcde 2129*7c356e86SAndroid Build Coastguard Worker 4: abc 2130*7c356e86SAndroid Build Coastguard Worker--- 2131*7c356e86SAndroid Build Coastguard Workername: eglob-trim-2 2132*7c356e86SAndroid Build Coastguard Workerdescription: 2133*7c356e86SAndroid Build Coastguard Worker Check eglobbing works in trims... 2134*7c356e86SAndroid Build Coastguard Workerstdin: 2135*7c356e86SAndroid Build Coastguard Worker x=abcdef 2136*7c356e86SAndroid Build Coastguard Worker echo 1: ${x#*(a|b)cd} 2137*7c356e86SAndroid Build Coastguard Worker echo 2: "${x#*(a|b)cd}" 2138*7c356e86SAndroid Build Coastguard Worker echo 3: ${x#"*(a|b)cd"} 2139*7c356e86SAndroid Build Coastguard Worker echo 4: ${x#a(b|c)} 2140*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2141*7c356e86SAndroid Build Coastguard Worker 1: ef 2142*7c356e86SAndroid Build Coastguard Worker 2: ef 2143*7c356e86SAndroid Build Coastguard Worker 3: abcdef 2144*7c356e86SAndroid Build Coastguard Worker 4: cdef 2145*7c356e86SAndroid Build Coastguard Worker--- 2146*7c356e86SAndroid Build Coastguard Workername: eglob-trim-3 2147*7c356e86SAndroid Build Coastguard Workerdescription: 2148*7c356e86SAndroid Build Coastguard Worker Check eglobbing works in trims, for Korn Shell 2149*7c356e86SAndroid Build Coastguard Worker Ensure eglobbing does not work for reduced-feature /bin/sh 2150*7c356e86SAndroid Build Coastguard Workerstdin: 2151*7c356e86SAndroid Build Coastguard Worker set +o sh 2152*7c356e86SAndroid Build Coastguard Worker x=foobar 2153*7c356e86SAndroid Build Coastguard Worker y=foobaz 2154*7c356e86SAndroid Build Coastguard Worker z=fooba\? 2155*7c356e86SAndroid Build Coastguard Worker echo "<${x%bar|baz},${y%bar|baz},${z%\?}>" 2156*7c356e86SAndroid Build Coastguard Worker echo "<${x%ba(r|z)},${y%ba(r|z)}>" 2157*7c356e86SAndroid Build Coastguard Worker set -o sh 2158*7c356e86SAndroid Build Coastguard Worker echo "<${x%bar|baz},${y%bar|baz},${z%\?}>" 2159*7c356e86SAndroid Build Coastguard Worker z='foo(bar' 2160*7c356e86SAndroid Build Coastguard Worker echo "<${z%(*}>" 2161*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2162*7c356e86SAndroid Build Coastguard Worker <foo,foo,fooba> 2163*7c356e86SAndroid Build Coastguard Worker <foo,foo> 2164*7c356e86SAndroid Build Coastguard Worker <foobar,foobaz,fooba> 2165*7c356e86SAndroid Build Coastguard Worker <foo> 2166*7c356e86SAndroid Build Coastguard Worker--- 2167*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-1 2168*7c356e86SAndroid Build Coastguard Workerdescription: 2169*7c356e86SAndroid Build Coastguard Worker Check eglobbing works in substs... and they work at all 2170*7c356e86SAndroid Build Coastguard Workerstdin: 2171*7c356e86SAndroid Build Coastguard Worker [[ -n $BASH_VERSION ]] && shopt -s extglob 2172*7c356e86SAndroid Build Coastguard Worker x=1222321_ab/cde_b/c_1221 2173*7c356e86SAndroid Build Coastguard Worker y=xyz 2174*7c356e86SAndroid Build Coastguard Worker echo 1: ${x/2} . ${x/} 2175*7c356e86SAndroid Build Coastguard Worker echo 2: ${x//2} 2176*7c356e86SAndroid Build Coastguard Worker echo 3: ${x/+(2)} 2177*7c356e86SAndroid Build Coastguard Worker echo 4: ${x//+(2)} 2178*7c356e86SAndroid Build Coastguard Worker echo 5: ${x/2/4} 2179*7c356e86SAndroid Build Coastguard Worker echo 6: ${x//2/4} 2180*7c356e86SAndroid Build Coastguard Worker echo 7: ${x/+(2)/4} 2181*7c356e86SAndroid Build Coastguard Worker echo 8: ${x//+(2)/4} 2182*7c356e86SAndroid Build Coastguard Worker echo 9: ${x/b/c/e/f} 2183*7c356e86SAndroid Build Coastguard Worker echo 10: ${x/b\/c/e/f} 2184*7c356e86SAndroid Build Coastguard Worker echo 11: ${x/b\/c/e\/f} 2185*7c356e86SAndroid Build Coastguard Worker echo 12: ${x/b\/c/e\\/f} 2186*7c356e86SAndroid Build Coastguard Worker echo 13: ${x/b\\/c/e\\/f} 2187*7c356e86SAndroid Build Coastguard Worker echo 14: ${x//b/c/e/f} 2188*7c356e86SAndroid Build Coastguard Worker echo 15: ${x//b\/c/e/f} 2189*7c356e86SAndroid Build Coastguard Worker echo 16: ${x//b\/c/e\/f} 2190*7c356e86SAndroid Build Coastguard Worker echo 17: ${x//b\/c/e\\/f} 2191*7c356e86SAndroid Build Coastguard Worker echo 18: ${x//b\\/c/e\\/f} 2192*7c356e86SAndroid Build Coastguard Worker echo 19: ${x/b\/*\/c/x} 2193*7c356e86SAndroid Build Coastguard Worker echo 20: ${x/\//.} 2194*7c356e86SAndroid Build Coastguard Worker echo 21: ${x//\//.} 2195*7c356e86SAndroid Build Coastguard Worker echo 22: ${x///.} 2196*7c356e86SAndroid Build Coastguard Worker echo 23: ${x/#1/9} 2197*7c356e86SAndroid Build Coastguard Worker echo 24: ${x//#1/9} 2198*7c356e86SAndroid Build Coastguard Worker echo 25: ${x/%1/9} 2199*7c356e86SAndroid Build Coastguard Worker echo 26: ${x//%1/9} 2200*7c356e86SAndroid Build Coastguard Worker echo 27: ${x//\%1/9} 2201*7c356e86SAndroid Build Coastguard Worker echo 28: ${x//\\%1/9} 2202*7c356e86SAndroid Build Coastguard Worker echo 29: ${x//\a/9} 2203*7c356e86SAndroid Build Coastguard Worker echo 30: ${x//\\a/9} 2204*7c356e86SAndroid Build Coastguard Worker echo 31: ${x/2/$y} 2205*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2206*7c356e86SAndroid Build Coastguard Worker 1: 122321_ab/cde_b/c_1221 . 1222321_ab/cde_b/c_1221 2207*7c356e86SAndroid Build Coastguard Worker 2: 131_ab/cde_b/c_11 2208*7c356e86SAndroid Build Coastguard Worker 3: 1321_ab/cde_b/c_1221 2209*7c356e86SAndroid Build Coastguard Worker 4: 131_ab/cde_b/c_11 2210*7c356e86SAndroid Build Coastguard Worker 5: 1422321_ab/cde_b/c_1221 2211*7c356e86SAndroid Build Coastguard Worker 6: 1444341_ab/cde_b/c_1441 2212*7c356e86SAndroid Build Coastguard Worker 7: 14321_ab/cde_b/c_1221 2213*7c356e86SAndroid Build Coastguard Worker 8: 14341_ab/cde_b/c_141 2214*7c356e86SAndroid Build Coastguard Worker 9: 1222321_ac/e/f/cde_b/c_1221 2215*7c356e86SAndroid Build Coastguard Worker 10: 1222321_ae/fde_b/c_1221 2216*7c356e86SAndroid Build Coastguard Worker 11: 1222321_ae/fde_b/c_1221 2217*7c356e86SAndroid Build Coastguard Worker 12: 1222321_ae\/fde_b/c_1221 2218*7c356e86SAndroid Build Coastguard Worker 13: 1222321_ab/cde_b/c_1221 2219*7c356e86SAndroid Build Coastguard Worker 14: 1222321_ac/e/f/cde_c/e/f/c_1221 2220*7c356e86SAndroid Build Coastguard Worker 15: 1222321_ae/fde_e/f_1221 2221*7c356e86SAndroid Build Coastguard Worker 16: 1222321_ae/fde_e/f_1221 2222*7c356e86SAndroid Build Coastguard Worker 17: 1222321_ae\/fde_e\/f_1221 2223*7c356e86SAndroid Build Coastguard Worker 18: 1222321_ab/cde_b/c_1221 2224*7c356e86SAndroid Build Coastguard Worker 19: 1222321_ax_1221 2225*7c356e86SAndroid Build Coastguard Worker 20: 1222321_ab.cde_b/c_1221 2226*7c356e86SAndroid Build Coastguard Worker 21: 1222321_ab.cde_b.c_1221 2227*7c356e86SAndroid Build Coastguard Worker 22: 1222321_ab/cde_b/c_1221 2228*7c356e86SAndroid Build Coastguard Worker 23: 9222321_ab/cde_b/c_1221 2229*7c356e86SAndroid Build Coastguard Worker 24: 1222321_ab/cde_b/c_1221 2230*7c356e86SAndroid Build Coastguard Worker 25: 1222321_ab/cde_b/c_1229 2231*7c356e86SAndroid Build Coastguard Worker 26: 1222321_ab/cde_b/c_1221 2232*7c356e86SAndroid Build Coastguard Worker 27: 1222321_ab/cde_b/c_1221 2233*7c356e86SAndroid Build Coastguard Worker 28: 1222321_ab/cde_b/c_1221 2234*7c356e86SAndroid Build Coastguard Worker 29: 1222321_9b/cde_b/c_1221 2235*7c356e86SAndroid Build Coastguard Worker 30: 1222321_ab/cde_b/c_1221 2236*7c356e86SAndroid Build Coastguard Worker 31: 1xyz22321_ab/cde_b/c_1221 2237*7c356e86SAndroid Build Coastguard Worker--- 2238*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-2 2239*7c356e86SAndroid Build Coastguard Workerdescription: 2240*7c356e86SAndroid Build Coastguard Worker Check anchored substring replacement works, corner cases 2241*7c356e86SAndroid Build Coastguard Workerstdin: 2242*7c356e86SAndroid Build Coastguard Worker foo=123 2243*7c356e86SAndroid Build Coastguard Worker echo 1: ${foo/#/x} 2244*7c356e86SAndroid Build Coastguard Worker echo 2: ${foo/%/x} 2245*7c356e86SAndroid Build Coastguard Worker echo 3: ${foo/#/} 2246*7c356e86SAndroid Build Coastguard Worker echo 4: ${foo/#} 2247*7c356e86SAndroid Build Coastguard Worker echo 5: ${foo/%/} 2248*7c356e86SAndroid Build Coastguard Worker echo 6: ${foo/%} 2249*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2250*7c356e86SAndroid Build Coastguard Worker 1: x123 2251*7c356e86SAndroid Build Coastguard Worker 2: 123x 2252*7c356e86SAndroid Build Coastguard Worker 3: 123 2253*7c356e86SAndroid Build Coastguard Worker 4: 123 2254*7c356e86SAndroid Build Coastguard Worker 5: 123 2255*7c356e86SAndroid Build Coastguard Worker 6: 123 2256*7c356e86SAndroid Build Coastguard Worker--- 2257*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-3a 2258*7c356e86SAndroid Build Coastguard Workerdescription: 2259*7c356e86SAndroid Build Coastguard Worker Check substring replacement works with variables and slashes, too 2260*7c356e86SAndroid Build Coastguard Workerstdin: 2261*7c356e86SAndroid Build Coastguard Worker HOME=/etc 2262*7c356e86SAndroid Build Coastguard Worker pfx=/home/user 2263*7c356e86SAndroid Build Coastguard Worker wd=/home/user/tmp 2264*7c356e86SAndroid Build Coastguard Worker echo "${wd/#$pfx/~}" 2265*7c356e86SAndroid Build Coastguard Worker echo "${wd/#\$pfx/~}" 2266*7c356e86SAndroid Build Coastguard Worker echo "${wd/#"$pfx"/~}" 2267*7c356e86SAndroid Build Coastguard Worker echo "${wd/#'$pfx'/~}" 2268*7c356e86SAndroid Build Coastguard Worker echo "${wd/#"\$pfx"/~}" 2269*7c356e86SAndroid Build Coastguard Worker echo "${wd/#'\$pfx'/~}" 2270*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2271*7c356e86SAndroid Build Coastguard Worker /etc/tmp 2272*7c356e86SAndroid Build Coastguard Worker /home/user/tmp 2273*7c356e86SAndroid Build Coastguard Worker /etc/tmp 2274*7c356e86SAndroid Build Coastguard Worker /home/user/tmp 2275*7c356e86SAndroid Build Coastguard Worker /home/user/tmp 2276*7c356e86SAndroid Build Coastguard Worker /home/user/tmp 2277*7c356e86SAndroid Build Coastguard Worker--- 2278*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-3b 2279*7c356e86SAndroid Build Coastguard Workerdescription: 2280*7c356e86SAndroid Build Coastguard Worker More of this, bash fails it (bash4 passes) 2281*7c356e86SAndroid Build Coastguard Workerstdin: 2282*7c356e86SAndroid Build Coastguard Worker HOME=/etc 2283*7c356e86SAndroid Build Coastguard Worker pfx=/home/user 2284*7c356e86SAndroid Build Coastguard Worker wd=/home/user/tmp 2285*7c356e86SAndroid Build Coastguard Worker echo "${wd/#$(echo /home/user)/~}" 2286*7c356e86SAndroid Build Coastguard Worker echo "${wd/#"$(echo /home/user)"/~}" 2287*7c356e86SAndroid Build Coastguard Worker echo "${wd/#'$(echo /home/user)'/~}" 2288*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2289*7c356e86SAndroid Build Coastguard Worker /etc/tmp 2290*7c356e86SAndroid Build Coastguard Worker /etc/tmp 2291*7c356e86SAndroid Build Coastguard Worker /home/user/tmp 2292*7c356e86SAndroid Build Coastguard Worker--- 2293*7c356e86SAndroid Build Coastguard Workername: eglob-substrpl-3c 2294*7c356e86SAndroid Build Coastguard Workerdescription: 2295*7c356e86SAndroid Build Coastguard Worker Even more weird cases 2296*7c356e86SAndroid Build Coastguard Workerstdin: 2297*7c356e86SAndroid Build Coastguard Worker HOME=/etc 2298*7c356e86SAndroid Build Coastguard Worker pfx=/home/user 2299*7c356e86SAndroid Build Coastguard Worker wd='$pfx/tmp' 2300*7c356e86SAndroid Build Coastguard Worker echo 1: ${wd/#$pfx/~} 2301*7c356e86SAndroid Build Coastguard Worker echo 2: ${wd/#\$pfx/~} 2302*7c356e86SAndroid Build Coastguard Worker echo 3: ${wd/#"$pfx"/~} 2303*7c356e86SAndroid Build Coastguard Worker echo 4: ${wd/#'$pfx'/~} 2304*7c356e86SAndroid Build Coastguard Worker echo 5: ${wd/#"\$pfx"/~} 2305*7c356e86SAndroid Build Coastguard Worker echo 6: ${wd/#'\$pfx'/~} 2306*7c356e86SAndroid Build Coastguard Worker ts='a/ba/b$tp$tp_a/b$tp_*(a/b)_*($tp)' 2307*7c356e86SAndroid Build Coastguard Worker tp=a/b 2308*7c356e86SAndroid Build Coastguard Worker tr=c/d 2309*7c356e86SAndroid Build Coastguard Worker [[ -n $BASH_VERSION ]] && shopt -s extglob 2310*7c356e86SAndroid Build Coastguard Worker echo 7: ${ts/a\/b/$tr} 2311*7c356e86SAndroid Build Coastguard Worker echo 8: ${ts/a\/b/\$tr} 2312*7c356e86SAndroid Build Coastguard Worker echo 9: ${ts/$tp/$tr} 2313*7c356e86SAndroid Build Coastguard Worker echo 10: ${ts/\$tp/$tr} 2314*7c356e86SAndroid Build Coastguard Worker echo 11: ${ts/\\$tp/$tr} 2315*7c356e86SAndroid Build Coastguard Worker echo 12: ${ts/$tp/c/d} 2316*7c356e86SAndroid Build Coastguard Worker echo 13: ${ts/$tp/c\/d} 2317*7c356e86SAndroid Build Coastguard Worker echo 14: ${ts/$tp/c\\/d} 2318*7c356e86SAndroid Build Coastguard Worker echo 15: ${ts/+(a\/b)/$tr} 2319*7c356e86SAndroid Build Coastguard Worker echo 16: ${ts/+(a\/b)/\$tr} 2320*7c356e86SAndroid Build Coastguard Worker echo 17: ${ts/+($tp)/$tr} 2321*7c356e86SAndroid Build Coastguard Worker echo 18: ${ts/+($tp)/c/d} 2322*7c356e86SAndroid Build Coastguard Worker echo 19: ${ts/+($tp)/c\/d} 2323*7c356e86SAndroid Build Coastguard Worker echo 20: ${ts//a\/b/$tr} 2324*7c356e86SAndroid Build Coastguard Worker echo 21: ${ts//a\/b/\$tr} 2325*7c356e86SAndroid Build Coastguard Worker echo 22: ${ts//$tp/$tr} 2326*7c356e86SAndroid Build Coastguard Worker echo 23: ${ts//$tp/c/d} 2327*7c356e86SAndroid Build Coastguard Worker echo 24: ${ts//$tp/c\/d} 2328*7c356e86SAndroid Build Coastguard Worker echo 25: ${ts//+(a\/b)/$tr} 2329*7c356e86SAndroid Build Coastguard Worker echo 26: ${ts//+(a\/b)/\$tr} 2330*7c356e86SAndroid Build Coastguard Worker echo 27: ${ts//+($tp)/$tr} 2331*7c356e86SAndroid Build Coastguard Worker echo 28: ${ts//+($tp)/c/d} 2332*7c356e86SAndroid Build Coastguard Worker echo 29: ${ts//+($tp)/c\/d} 2333*7c356e86SAndroid Build Coastguard Worker tp="+($tp)" 2334*7c356e86SAndroid Build Coastguard Worker echo 30: ${ts/$tp/$tr} 2335*7c356e86SAndroid Build Coastguard Worker echo 31: ${ts//$tp/$tr} 2336*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2337*7c356e86SAndroid Build Coastguard Worker 1: $pfx/tmp 2338*7c356e86SAndroid Build Coastguard Worker 2: /etc/tmp 2339*7c356e86SAndroid Build Coastguard Worker 3: $pfx/tmp 2340*7c356e86SAndroid Build Coastguard Worker 4: /etc/tmp 2341*7c356e86SAndroid Build Coastguard Worker 5: /etc/tmp 2342*7c356e86SAndroid Build Coastguard Worker 6: $pfx/tmp 2343*7c356e86SAndroid Build Coastguard Worker 7: c/da/b$tp$tp_a/b$tp_*(a/b)_*($tp) 2344*7c356e86SAndroid Build Coastguard Worker 8: $tra/b$tp$tp_a/b$tp_*(a/b)_*($tp) 2345*7c356e86SAndroid Build Coastguard Worker 9: c/da/b$tp$tp_a/b$tp_*(a/b)_*($tp) 2346*7c356e86SAndroid Build Coastguard Worker 10: a/ba/bc/d$tp_a/b$tp_*(a/b)_*($tp) 2347*7c356e86SAndroid Build Coastguard Worker 11: a/ba/b$tp$tp_a/b$tp_*(a/b)_*($tp) 2348*7c356e86SAndroid Build Coastguard Worker 12: c/da/b$tp$tp_a/b$tp_*(a/b)_*($tp) 2349*7c356e86SAndroid Build Coastguard Worker 13: c/da/b$tp$tp_a/b$tp_*(a/b)_*($tp) 2350*7c356e86SAndroid Build Coastguard Worker 14: c\/da/b$tp$tp_a/b$tp_*(a/b)_*($tp) 2351*7c356e86SAndroid Build Coastguard Worker 15: c/d$tp$tp_a/b$tp_*(a/b)_*($tp) 2352*7c356e86SAndroid Build Coastguard Worker 16: $tr$tp$tp_a/b$tp_*(a/b)_*($tp) 2353*7c356e86SAndroid Build Coastguard Worker 17: c/d$tp$tp_a/b$tp_*(a/b)_*($tp) 2354*7c356e86SAndroid Build Coastguard Worker 18: c/d$tp$tp_a/b$tp_*(a/b)_*($tp) 2355*7c356e86SAndroid Build Coastguard Worker 19: c/d$tp$tp_a/b$tp_*(a/b)_*($tp) 2356*7c356e86SAndroid Build Coastguard Worker 20: c/dc/d$tp$tp_c/d$tp_*(c/d)_*($tp) 2357*7c356e86SAndroid Build Coastguard Worker 21: $tr$tr$tp$tp_$tr$tp_*($tr)_*($tp) 2358*7c356e86SAndroid Build Coastguard Worker 22: c/dc/d$tp$tp_c/d$tp_*(c/d)_*($tp) 2359*7c356e86SAndroid Build Coastguard Worker 23: c/dc/d$tp$tp_c/d$tp_*(c/d)_*($tp) 2360*7c356e86SAndroid Build Coastguard Worker 24: c/dc/d$tp$tp_c/d$tp_*(c/d)_*($tp) 2361*7c356e86SAndroid Build Coastguard Worker 25: c/d$tp$tp_c/d$tp_*(c/d)_*($tp) 2362*7c356e86SAndroid Build Coastguard Worker 26: $tr$tp$tp_$tr$tp_*($tr)_*($tp) 2363*7c356e86SAndroid Build Coastguard Worker 27: c/d$tp$tp_c/d$tp_*(c/d)_*($tp) 2364*7c356e86SAndroid Build Coastguard Worker 28: c/d$tp$tp_c/d$tp_*(c/d)_*($tp) 2365*7c356e86SAndroid Build Coastguard Worker 29: c/d$tp$tp_c/d$tp_*(c/d)_*($tp) 2366*7c356e86SAndroid Build Coastguard Worker 30: a/ba/b$tp$tp_a/b$tp_*(a/b)_*($tp) 2367*7c356e86SAndroid Build Coastguard Worker 31: a/ba/b$tp$tp_a/b$tp_*(a/b)_*($tp) 2368*7c356e86SAndroid Build Coastguard Worker# This is what GNU bash does: 2369*7c356e86SAndroid Build Coastguard Worker# 30: c/d$tp$tp_a/b$tp_*(a/b)_*($tp) 2370*7c356e86SAndroid Build Coastguard Worker# 31: c/d$tp$tp_c/d$tp_*(c/d)_*($tp) 2371*7c356e86SAndroid Build Coastguard Worker--- 2372*7c356e86SAndroid Build Coastguard Workername: eglob-utf8-1 2373*7c356e86SAndroid Build Coastguard Workerdescription: 2374*7c356e86SAndroid Build Coastguard Worker UTF-8 mode differences for eglobbing 2375*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes 2376*7c356e86SAndroid Build Coastguard Workerstdin: 2377*7c356e86SAndroid Build Coastguard Worker s=blöd 2378*7c356e86SAndroid Build Coastguard Worker set +U 2379*7c356e86SAndroid Build Coastguard Worker print 1: ${s%???} . 2380*7c356e86SAndroid Build Coastguard Worker print 2: ${s/b???d/x} . 2381*7c356e86SAndroid Build Coastguard Worker set -U 2382*7c356e86SAndroid Build Coastguard Worker print 3: ${s%???} . 2383*7c356e86SAndroid Build Coastguard Worker print 4: ${s/b??d/x} . 2384*7c356e86SAndroid Build Coastguard Worker x=nö 2385*7c356e86SAndroid Build Coastguard Worker print 5: ${x%?} ${x%%?} . 2386*7c356e86SAndroid Build Coastguard Worker x=äh 2387*7c356e86SAndroid Build Coastguard Worker print 6: ${x#?} ${x##?} . 2388*7c356e86SAndroid Build Coastguard Worker x=�� 2389*7c356e86SAndroid Build Coastguard Worker print 7: ${x%?} ${x%%?} . 2390*7c356e86SAndroid Build Coastguard Worker x=mä� 2391*7c356e86SAndroid Build Coastguard Worker print 8: ${x%?} ${x%%?} . 2392*7c356e86SAndroid Build Coastguard Worker x=何 2393*7c356e86SAndroid Build Coastguard Worker print 9: ${x%?} ${x%%?} . 2394*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2395*7c356e86SAndroid Build Coastguard Worker 1: bl . 2396*7c356e86SAndroid Build Coastguard Worker 2: x . 2397*7c356e86SAndroid Build Coastguard Worker 3: b . 2398*7c356e86SAndroid Build Coastguard Worker 4: x . 2399*7c356e86SAndroid Build Coastguard Worker 5: n n . 2400*7c356e86SAndroid Build Coastguard Worker 6: h h . 2401*7c356e86SAndroid Build Coastguard Worker 7: � � . 2402*7c356e86SAndroid Build Coastguard Worker 8: mä mä . 2403*7c356e86SAndroid Build Coastguard Worker 9: . 2404*7c356e86SAndroid Build Coastguard Worker--- 2405*7c356e86SAndroid Build Coastguard Workername: glob-bad-1 2406*7c356e86SAndroid Build Coastguard Workerdescription: 2407*7c356e86SAndroid Build Coastguard Worker Check that [ matches itself if it's not a valid bracket expr 2408*7c356e86SAndroid Build Coastguard Worker but does not prevent globbing, while backslash-escaping does 2409*7c356e86SAndroid Build Coastguard Workerfile-setup: dir 755 "[x" 2410*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "[x/foo" 2411*7c356e86SAndroid Build Coastguard Workerstdin: 2412*7c356e86SAndroid Build Coastguard Worker echo [* 2413*7c356e86SAndroid Build Coastguard Worker echo *[x 2414*7c356e86SAndroid Build Coastguard Worker echo [x/* 2415*7c356e86SAndroid Build Coastguard Worker :>'ab[x' 2416*7c356e86SAndroid Build Coastguard Worker :>'a[a-z][x' 2417*7c356e86SAndroid Build Coastguard Worker echo a[a-z][* 2418*7c356e86SAndroid Build Coastguard Worker echo a[a-z]* 2419*7c356e86SAndroid Build Coastguard Worker echo a[a\-z]* 2420*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2421*7c356e86SAndroid Build Coastguard Worker [x 2422*7c356e86SAndroid Build Coastguard Worker [x 2423*7c356e86SAndroid Build Coastguard Worker [x/foo 2424*7c356e86SAndroid Build Coastguard Worker ab[x 2425*7c356e86SAndroid Build Coastguard Worker ab[x 2426*7c356e86SAndroid Build Coastguard Worker a[a-z]* 2427*7c356e86SAndroid Build Coastguard Worker--- 2428*7c356e86SAndroid Build Coastguard Workername: glob-bad-2 2429*7c356e86SAndroid Build Coastguard Workerdescription: 2430*7c356e86SAndroid Build Coastguard Worker Check that symbolic links aren't stat()'d 2431*7c356e86SAndroid Build Coastguard Worker# breaks on Dell UNIX 4.0 R2.2 (SVR4) where unlink also fails 2432*7c356e86SAndroid Build Coastguard Worker# breaks on FreeMiNT (cannot unlink dangling symlinks) 2433*7c356e86SAndroid Build Coastguard Worker# breaks on MSYS, OS/2 (do not support symlinks) 2434*7c356e86SAndroid Build Coastguard Workercategory: !os:mint,!os:msys,!os:svr4.0,!nosymlink 2435*7c356e86SAndroid Build Coastguard Workerfile-setup: dir 755 "dir" 2436*7c356e86SAndroid Build Coastguard Workerfile-setup: symlink 644 "dir/abc" 2437*7c356e86SAndroid Build Coastguard Worker non-existent-file 2438*7c356e86SAndroid Build Coastguard Workerstdin: 2439*7c356e86SAndroid Build Coastguard Worker echo d*/* 2440*7c356e86SAndroid Build Coastguard Worker echo d*/abc 2441*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2442*7c356e86SAndroid Build Coastguard Worker dir/abc 2443*7c356e86SAndroid Build Coastguard Worker dir/abc 2444*7c356e86SAndroid Build Coastguard Worker--- 2445*7c356e86SAndroid Build Coastguard Workername: glob-bad-3 2446*7c356e86SAndroid Build Coastguard Workerdescription: 2447*7c356e86SAndroid Build Coastguard Worker Check that the slash is parsed before the glob 2448*7c356e86SAndroid Build Coastguard Workerstdin: 2449*7c356e86SAndroid Build Coastguard Worker mkdir a 'a[b' 2450*7c356e86SAndroid Build Coastguard Worker (cd 'a[b'; echo ok >'c]d') 2451*7c356e86SAndroid Build Coastguard Worker echo nok >abd 2452*7c356e86SAndroid Build Coastguard Worker echo fail >a/d 2453*7c356e86SAndroid Build Coastguard Worker cat a[b/c]d 2454*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2455*7c356e86SAndroid Build Coastguard Worker ok 2456*7c356e86SAndroid Build Coastguard Worker--- 2457*7c356e86SAndroid Build Coastguard Workername: glob-range-1 2458*7c356e86SAndroid Build Coastguard Workerdescription: 2459*7c356e86SAndroid Build Coastguard Worker Test range matching 2460*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".bc" 2461*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc" 2462*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "bbc" 2463*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "cbc" 2464*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "-bc" 2465*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "!bc" 2466*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "^bc" 2467*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "+bc" 2468*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ",bc" 2469*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "0bc" 2470*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "1bc" 2471*7c356e86SAndroid Build Coastguard Workerstdin: 2472*7c356e86SAndroid Build Coastguard Worker echo [ab-]* 2473*7c356e86SAndroid Build Coastguard Worker echo [-ab]* 2474*7c356e86SAndroid Build Coastguard Worker echo [!-ab]* 2475*7c356e86SAndroid Build Coastguard Worker echo [!ab]* 2476*7c356e86SAndroid Build Coastguard Worker echo []ab]* 2477*7c356e86SAndroid Build Coastguard Worker echo [^ab]* 2478*7c356e86SAndroid Build Coastguard Worker echo [+--]* 2479*7c356e86SAndroid Build Coastguard Worker echo [--1]* 2480*7c356e86SAndroid Build Coastguard Worker 2481*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2482*7c356e86SAndroid Build Coastguard Worker -bc abc bbc 2483*7c356e86SAndroid Build Coastguard Worker -bc abc bbc 2484*7c356e86SAndroid Build Coastguard Worker !bc +bc ,bc 0bc 1bc ^bc cbc 2485*7c356e86SAndroid Build Coastguard Worker !bc +bc ,bc -bc 0bc 1bc ^bc cbc 2486*7c356e86SAndroid Build Coastguard Worker abc bbc 2487*7c356e86SAndroid Build Coastguard Worker ^bc abc bbc 2488*7c356e86SAndroid Build Coastguard Worker +bc ,bc -bc 2489*7c356e86SAndroid Build Coastguard Worker -bc 0bc 1bc 2490*7c356e86SAndroid Build Coastguard Worker--- 2491*7c356e86SAndroid Build Coastguard Workername: glob-range-2 2492*7c356e86SAndroid Build Coastguard Workerdescription: 2493*7c356e86SAndroid Build Coastguard Worker Test range matching 2494*7c356e86SAndroid Build Coastguard Worker (AT&T ksh fails this; POSIX says invalid) 2495*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc" 2496*7c356e86SAndroid Build Coastguard Workerstdin: 2497*7c356e86SAndroid Build Coastguard Worker echo [a--]* 2498*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2499*7c356e86SAndroid Build Coastguard Worker [a--]* 2500*7c356e86SAndroid Build Coastguard Worker--- 2501*7c356e86SAndroid Build Coastguard Workername: glob-range-3 2502*7c356e86SAndroid Build Coastguard Workerdescription: 2503*7c356e86SAndroid Build Coastguard Worker Check that globbing matches the right things... 2504*7c356e86SAndroid Build Coastguard Worker# breaks on Mac OSX (HFS+ non-standard UTF-8 canonical decomposition) 2505*7c356e86SAndroid Build Coastguard Worker# breaks on Cygwin 1.7 (files are now UTF-16 or something) 2506*7c356e86SAndroid Build Coastguard Worker# breaks on QNX 6.4.1 (says RT) 2507*7c356e86SAndroid Build Coastguard Workercategory: !os:cygwin,!os:midipix,!os:darwin,!os:msys,!os:nto,!os:os2,!os:os390 2508*7c356e86SAndroid Build Coastguard Workerneed-pass: no 2509*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "a�c" 2510*7c356e86SAndroid Build Coastguard Workerstdin: 2511*7c356e86SAndroid Build Coastguard Worker echo a[�-�]* 2512*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2513*7c356e86SAndroid Build Coastguard Worker a�c 2514*7c356e86SAndroid Build Coastguard Worker--- 2515*7c356e86SAndroid Build Coastguard Workername: glob-range-4 2516*7c356e86SAndroid Build Coastguard Workerdescription: 2517*7c356e86SAndroid Build Coastguard Worker Results unspecified according to POSIX 2518*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".bc" 2519*7c356e86SAndroid Build Coastguard Workerstdin: 2520*7c356e86SAndroid Build Coastguard Worker echo [a.]* 2521*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2522*7c356e86SAndroid Build Coastguard Worker [a.]* 2523*7c356e86SAndroid Build Coastguard Worker--- 2524*7c356e86SAndroid Build Coastguard Workername: glob-range-5 2525*7c356e86SAndroid Build Coastguard Workerdescription: 2526*7c356e86SAndroid Build Coastguard Worker Results unspecified according to POSIX 2527*7c356e86SAndroid Build Coastguard Worker (AT&T ksh treats this like [a-cc-e]*) 2528*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc" 2529*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "bbc" 2530*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "cbc" 2531*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "dbc" 2532*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "ebc" 2533*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "-bc" 2534*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "@bc" 2535*7c356e86SAndroid Build Coastguard Workerstdin: 2536*7c356e86SAndroid Build Coastguard Worker echo [a-c-e]* 2537*7c356e86SAndroid Build Coastguard Worker echo [a--@]* 2538*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2539*7c356e86SAndroid Build Coastguard Worker -bc abc bbc cbc ebc 2540*7c356e86SAndroid Build Coastguard Worker @bc 2541*7c356e86SAndroid Build Coastguard Worker--- 2542*7c356e86SAndroid Build Coastguard Workername: glob-range-6 2543*7c356e86SAndroid Build Coastguard Workerdescription: 2544*7c356e86SAndroid Build Coastguard Worker ksh93 fails this but POSIX probably demands it 2545*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc" 2546*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "cbc" 2547*7c356e86SAndroid Build Coastguard Workerstdin: 2548*7c356e86SAndroid Build Coastguard Worker echo *b* 2549*7c356e86SAndroid Build Coastguard Worker [ '*b*' = *b* ] && echo yep; echo $? 2550*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2551*7c356e86SAndroid Build Coastguard Worker abc cbc 2552*7c356e86SAndroid Build Coastguard Worker 2 2553*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/ 2554*7c356e86SAndroid Build Coastguard Worker--- 2555*7c356e86SAndroid Build Coastguard Workername: glob-word-1 2556*7c356e86SAndroid Build Coastguard Workerdescription: 2557*7c356e86SAndroid Build Coastguard Worker Check BSD word boundary matches 2558*7c356e86SAndroid Build Coastguard Workerstdin: 2559*7c356e86SAndroid Build Coastguard Worker t() { [[ $1 = *[[:\<:]]bar[[:\>:]]* ]]; echo =$?; } 2560*7c356e86SAndroid Build Coastguard Worker t 'foo bar baz' 2561*7c356e86SAndroid Build Coastguard Worker t 'foobar baz' 2562*7c356e86SAndroid Build Coastguard Worker t 'foo barbaz' 2563*7c356e86SAndroid Build Coastguard Worker t 'bar' 2564*7c356e86SAndroid Build Coastguard Worker t '_bar' 2565*7c356e86SAndroid Build Coastguard Worker t 'bar_' 2566*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2567*7c356e86SAndroid Build Coastguard Worker =0 2568*7c356e86SAndroid Build Coastguard Worker =1 2569*7c356e86SAndroid Build Coastguard Worker =1 2570*7c356e86SAndroid Build Coastguard Worker =0 2571*7c356e86SAndroid Build Coastguard Worker =1 2572*7c356e86SAndroid Build Coastguard Worker =1 2573*7c356e86SAndroid Build Coastguard Worker--- 2574*7c356e86SAndroid Build Coastguard Workername: glob-trim-1 2575*7c356e86SAndroid Build Coastguard Workerdescription: 2576*7c356e86SAndroid Build Coastguard Worker Check against a regression from fixing IFS-subst-2 2577*7c356e86SAndroid Build Coastguard Workerstdin: 2578*7c356e86SAndroid Build Coastguard Worker x='#foo' 2579*7c356e86SAndroid Build Coastguard Worker print -r "before='$x'" 2580*7c356e86SAndroid Build Coastguard Worker x=${x%%#*} 2581*7c356e86SAndroid Build Coastguard Worker print -r "after ='$x'" 2582*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2583*7c356e86SAndroid Build Coastguard Worker before='#foo' 2584*7c356e86SAndroid Build Coastguard Worker after ='' 2585*7c356e86SAndroid Build Coastguard Worker--- 2586*7c356e86SAndroid Build Coastguard Workername: heredoc-1 2587*7c356e86SAndroid Build Coastguard Workerdescription: 2588*7c356e86SAndroid Build Coastguard Worker Check ordering/content of redundent here documents. 2589*7c356e86SAndroid Build Coastguard Workerstdin: 2590*7c356e86SAndroid Build Coastguard Worker cat << EOF1 << EOF2 2591*7c356e86SAndroid Build Coastguard Worker hi 2592*7c356e86SAndroid Build Coastguard Worker EOF1 2593*7c356e86SAndroid Build Coastguard Worker there 2594*7c356e86SAndroid Build Coastguard Worker EOF2 2595*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2596*7c356e86SAndroid Build Coastguard Worker there 2597*7c356e86SAndroid Build Coastguard Worker--- 2598*7c356e86SAndroid Build Coastguard Workername: heredoc-2 2599*7c356e86SAndroid Build Coastguard Workerdescription: 2600*7c356e86SAndroid Build Coastguard Worker Check quoted here-doc is protected. 2601*7c356e86SAndroid Build Coastguard Workerstdin: 2602*7c356e86SAndroid Build Coastguard Worker a=foo 2603*7c356e86SAndroid Build Coastguard Worker cat << 'EOF' 2604*7c356e86SAndroid Build Coastguard Worker hi\ 2605*7c356e86SAndroid Build Coastguard Worker there$a 2606*7c356e86SAndroid Build Coastguard Worker stuff 2607*7c356e86SAndroid Build Coastguard Worker EO\ 2608*7c356e86SAndroid Build Coastguard Worker F 2609*7c356e86SAndroid Build Coastguard Worker EOF 2610*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2611*7c356e86SAndroid Build Coastguard Worker hi\ 2612*7c356e86SAndroid Build Coastguard Worker there$a 2613*7c356e86SAndroid Build Coastguard Worker stuff 2614*7c356e86SAndroid Build Coastguard Worker EO\ 2615*7c356e86SAndroid Build Coastguard Worker F 2616*7c356e86SAndroid Build Coastguard Worker--- 2617*7c356e86SAndroid Build Coastguard Workername: heredoc-3 2618*7c356e86SAndroid Build Coastguard Workerdescription: 2619*7c356e86SAndroid Build Coastguard Worker Check that newline isn't needed after heredoc-delimiter marker. 2620*7c356e86SAndroid Build Coastguard Workerstdin: ! 2621*7c356e86SAndroid Build Coastguard Worker cat << EOF 2622*7c356e86SAndroid Build Coastguard Worker hi 2623*7c356e86SAndroid Build Coastguard Worker there 2624*7c356e86SAndroid Build Coastguard Worker EOF 2625*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2626*7c356e86SAndroid Build Coastguard Worker hi 2627*7c356e86SAndroid Build Coastguard Worker there 2628*7c356e86SAndroid Build Coastguard Worker--- 2629*7c356e86SAndroid Build Coastguard Workername: heredoc-4a 2630*7c356e86SAndroid Build Coastguard Workerdescription: 2631*7c356e86SAndroid Build Coastguard Worker Check that an error occurs if the heredoc-delimiter is missing. 2632*7c356e86SAndroid Build Coastguard Workerstdin: ! 2633*7c356e86SAndroid Build Coastguard Worker cat << EOF 2634*7c356e86SAndroid Build Coastguard Worker hi 2635*7c356e86SAndroid Build Coastguard Worker there 2636*7c356e86SAndroid Build Coastguard Workerexpected-exit: e > 0 2637*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/ 2638*7c356e86SAndroid Build Coastguard Worker--- 2639*7c356e86SAndroid Build Coastguard Workername: heredoc-4an 2640*7c356e86SAndroid Build Coastguard Workerdescription: 2641*7c356e86SAndroid Build Coastguard Worker Check that an error occurs if the heredoc-delimiter is missing. 2642*7c356e86SAndroid Build Coastguard Workerarguments: !-n! 2643*7c356e86SAndroid Build Coastguard Workerstdin: ! 2644*7c356e86SAndroid Build Coastguard Worker cat << EOF 2645*7c356e86SAndroid Build Coastguard Worker hi 2646*7c356e86SAndroid Build Coastguard Worker there 2647*7c356e86SAndroid Build Coastguard Workerexpected-exit: e > 0 2648*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/ 2649*7c356e86SAndroid Build Coastguard Worker--- 2650*7c356e86SAndroid Build Coastguard Workername: heredoc-4b 2651*7c356e86SAndroid Build Coastguard Workerdescription: 2652*7c356e86SAndroid Build Coastguard Worker Check that an error occurs if the heredoc is missing. 2653*7c356e86SAndroid Build Coastguard Workerstdin: ! 2654*7c356e86SAndroid Build Coastguard Worker cat << EOF 2655*7c356e86SAndroid Build Coastguard Workerexpected-exit: e > 0 2656*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/ 2657*7c356e86SAndroid Build Coastguard Worker--- 2658*7c356e86SAndroid Build Coastguard Workername: heredoc-4bn 2659*7c356e86SAndroid Build Coastguard Workerdescription: 2660*7c356e86SAndroid Build Coastguard Worker Check that an error occurs if the heredoc is missing. 2661*7c356e86SAndroid Build Coastguard Workerarguments: !-n! 2662*7c356e86SAndroid Build Coastguard Workerstdin: ! 2663*7c356e86SAndroid Build Coastguard Worker cat << EOF 2664*7c356e86SAndroid Build Coastguard Workerexpected-exit: e > 0 2665*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/ 2666*7c356e86SAndroid Build Coastguard Worker--- 2667*7c356e86SAndroid Build Coastguard Workername: heredoc-5 2668*7c356e86SAndroid Build Coastguard Workerdescription: 2669*7c356e86SAndroid Build Coastguard Worker Check that backslash quotes a $, ` and \ and kills a \newline 2670*7c356e86SAndroid Build Coastguard Workerstdin: 2671*7c356e86SAndroid Build Coastguard Worker a=BAD 2672*7c356e86SAndroid Build Coastguard Worker b=ok 2673*7c356e86SAndroid Build Coastguard Worker cat << EOF 2674*7c356e86SAndroid Build Coastguard Worker h\${a}i 2675*7c356e86SAndroid Build Coastguard Worker h\\${b}i 2676*7c356e86SAndroid Build Coastguard Worker th\`echo not-run\`ere 2677*7c356e86SAndroid Build Coastguard Worker th\\`echo is-run`ere 2678*7c356e86SAndroid Build Coastguard Worker fol\\ks 2679*7c356e86SAndroid Build Coastguard Worker more\\ 2680*7c356e86SAndroid Build Coastguard Worker last \ 2681*7c356e86SAndroid Build Coastguard Worker line 2682*7c356e86SAndroid Build Coastguard Worker EOF 2683*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2684*7c356e86SAndroid Build Coastguard Worker h${a}i 2685*7c356e86SAndroid Build Coastguard Worker h\oki 2686*7c356e86SAndroid Build Coastguard Worker th`echo not-run`ere 2687*7c356e86SAndroid Build Coastguard Worker th\is-runere 2688*7c356e86SAndroid Build Coastguard Worker fol\ks 2689*7c356e86SAndroid Build Coastguard Worker more\ 2690*7c356e86SAndroid Build Coastguard Worker last line 2691*7c356e86SAndroid Build Coastguard Worker--- 2692*7c356e86SAndroid Build Coastguard Workername: heredoc-6 2693*7c356e86SAndroid Build Coastguard Workerdescription: 2694*7c356e86SAndroid Build Coastguard Worker Check that \newline in initial here-delim word doesn't imply 2695*7c356e86SAndroid Build Coastguard Worker a quoted here-doc. 2696*7c356e86SAndroid Build Coastguard Workerstdin: 2697*7c356e86SAndroid Build Coastguard Worker a=i 2698*7c356e86SAndroid Build Coastguard Worker cat << EO\ 2699*7c356e86SAndroid Build Coastguard Worker F 2700*7c356e86SAndroid Build Coastguard Worker h$a 2701*7c356e86SAndroid Build Coastguard Worker there 2702*7c356e86SAndroid Build Coastguard Worker EOF 2703*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2704*7c356e86SAndroid Build Coastguard Worker hi 2705*7c356e86SAndroid Build Coastguard Worker there 2706*7c356e86SAndroid Build Coastguard Worker--- 2707*7c356e86SAndroid Build Coastguard Workername: heredoc-7 2708*7c356e86SAndroid Build Coastguard Workerdescription: 2709*7c356e86SAndroid Build Coastguard Worker Check that double quoted $ expressions in here delimiters are 2710*7c356e86SAndroid Build Coastguard Worker not expanded and match the delimiter. 2711*7c356e86SAndroid Build Coastguard Worker POSIX says only quote removal is applied to the delimiter. 2712*7c356e86SAndroid Build Coastguard Workerstdin: 2713*7c356e86SAndroid Build Coastguard Worker a=b 2714*7c356e86SAndroid Build Coastguard Worker cat << "E$a" 2715*7c356e86SAndroid Build Coastguard Worker hi 2716*7c356e86SAndroid Build Coastguard Worker h$a 2717*7c356e86SAndroid Build Coastguard Worker hb 2718*7c356e86SAndroid Build Coastguard Worker E$a 2719*7c356e86SAndroid Build Coastguard Worker echo done 2720*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2721*7c356e86SAndroid Build Coastguard Worker hi 2722*7c356e86SAndroid Build Coastguard Worker h$a 2723*7c356e86SAndroid Build Coastguard Worker hb 2724*7c356e86SAndroid Build Coastguard Worker done 2725*7c356e86SAndroid Build Coastguard Worker--- 2726*7c356e86SAndroid Build Coastguard Workername: heredoc-8 2727*7c356e86SAndroid Build Coastguard Workerdescription: 2728*7c356e86SAndroid Build Coastguard Worker Check that double quoted escaped $ expressions in here 2729*7c356e86SAndroid Build Coastguard Worker delimiters are not expanded and match the delimiter. 2730*7c356e86SAndroid Build Coastguard Worker POSIX says only quote removal is applied to the delimiter 2731*7c356e86SAndroid Build Coastguard Worker (\ counts as a quote). 2732*7c356e86SAndroid Build Coastguard Workerstdin: 2733*7c356e86SAndroid Build Coastguard Worker a=b 2734*7c356e86SAndroid Build Coastguard Worker cat << "E\$a" 2735*7c356e86SAndroid Build Coastguard Worker hi 2736*7c356e86SAndroid Build Coastguard Worker h$a 2737*7c356e86SAndroid Build Coastguard Worker h\$a 2738*7c356e86SAndroid Build Coastguard Worker hb 2739*7c356e86SAndroid Build Coastguard Worker h\b 2740*7c356e86SAndroid Build Coastguard Worker E$a 2741*7c356e86SAndroid Build Coastguard Worker echo done 2742*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2743*7c356e86SAndroid Build Coastguard Worker hi 2744*7c356e86SAndroid Build Coastguard Worker h$a 2745*7c356e86SAndroid Build Coastguard Worker h\$a 2746*7c356e86SAndroid Build Coastguard Worker hb 2747*7c356e86SAndroid Build Coastguard Worker h\b 2748*7c356e86SAndroid Build Coastguard Worker done 2749*7c356e86SAndroid Build Coastguard Worker--- 2750*7c356e86SAndroid Build Coastguard Workername: heredoc-9 2751*7c356e86SAndroid Build Coastguard Workerdescription: 2752*7c356e86SAndroid Build Coastguard Worker Check that here strings work. 2753*7c356e86SAndroid Build Coastguard Workerstdin: 2754*7c356e86SAndroid Build Coastguard Worker bar="bar 2755*7c356e86SAndroid Build Coastguard Worker baz" 2756*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<foo 2757*7c356e86SAndroid Build Coastguard Worker "$__progname" -c "tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<foo" 2758*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<"$bar" 2759*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<'$bar' 2760*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<\$bar 2761*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<-foo 2762*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<"$(echo "foo bar")" 2763*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<"A $(echo "foo bar") B" 2764*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<\$b\$b$bar 2765*7c356e86SAndroid Build Coastguard Worker fnord=42 2766*7c356e86SAndroid Build Coastguard Worker bar="bar 2767*7c356e86SAndroid Build Coastguard Worker \$fnord baz" 2768*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<<$bar 2769*7c356e86SAndroid Build Coastguard Worker tr abcdefghijklmnopqrstuvwxyz nopqrstuvwxyzabcdefghijklm <<< bar 2770*7c356e86SAndroid Build Coastguard Worker echo $(tr r z <<<'bar' 2>/dev/null) 2771*7c356e86SAndroid Build Coastguard Worker cat <<< "$( : )aa" 2772*7c356e86SAndroid Build Coastguard Worker IFS=$'\n' 2773*7c356e86SAndroid Build Coastguard Worker x=(a "b c") 2774*7c356e86SAndroid Build Coastguard Worker tr ac 12 <<< ${x[*]} 2775*7c356e86SAndroid Build Coastguard Worker tr ac 34 <<< "${x[*]}" 2776*7c356e86SAndroid Build Coastguard Worker tr ac 56 <<< ${x[@]} 2777*7c356e86SAndroid Build Coastguard Worker tr ac 78 <<< "${x[@]}" 2778*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2779*7c356e86SAndroid Build Coastguard Worker sbb 2780*7c356e86SAndroid Build Coastguard Worker sbb 2781*7c356e86SAndroid Build Coastguard Worker one 2782*7c356e86SAndroid Build Coastguard Worker onm 2783*7c356e86SAndroid Build Coastguard Worker $one 2784*7c356e86SAndroid Build Coastguard Worker $one 2785*7c356e86SAndroid Build Coastguard Worker -sbb 2786*7c356e86SAndroid Build Coastguard Worker sbb one 2787*7c356e86SAndroid Build Coastguard Worker A sbb one B 2788*7c356e86SAndroid Build Coastguard Worker $o$oone 2789*7c356e86SAndroid Build Coastguard Worker onm 2790*7c356e86SAndroid Build Coastguard Worker one 2791*7c356e86SAndroid Build Coastguard Worker $sabeq onm 2792*7c356e86SAndroid Build Coastguard Worker one 2793*7c356e86SAndroid Build Coastguard Worker baz 2794*7c356e86SAndroid Build Coastguard Worker aa 2795*7c356e86SAndroid Build Coastguard Worker 1 2796*7c356e86SAndroid Build Coastguard Worker b 2 2797*7c356e86SAndroid Build Coastguard Worker 3 2798*7c356e86SAndroid Build Coastguard Worker b 4 2799*7c356e86SAndroid Build Coastguard Worker 5 b 6 2800*7c356e86SAndroid Build Coastguard Worker 7 b 8 2801*7c356e86SAndroid Build Coastguard Worker--- 2802*7c356e86SAndroid Build Coastguard Workername: heredoc-10 2803*7c356e86SAndroid Build Coastguard Workerdescription: 2804*7c356e86SAndroid Build Coastguard Worker Check direct here document assignment 2805*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes 2806*7c356e86SAndroid Build Coastguard Workerstdin: 2807*7c356e86SAndroid Build Coastguard Worker x=u 2808*7c356e86SAndroid Build Coastguard Worker va=<<EOF 2809*7c356e86SAndroid Build Coastguard Worker =a $x \x40= 2810*7c356e86SAndroid Build Coastguard Worker EOF 2811*7c356e86SAndroid Build Coastguard Worker vb=<<'EOF' 2812*7c356e86SAndroid Build Coastguard Worker =b $x \x40= 2813*7c356e86SAndroid Build Coastguard Worker EOF 2814*7c356e86SAndroid Build Coastguard Worker function foo { 2815*7c356e86SAndroid Build Coastguard Worker vc=<<-EOF 2816*7c356e86SAndroid Build Coastguard Worker =c $x \x40= 2817*7c356e86SAndroid Build Coastguard Worker EOF 2818*7c356e86SAndroid Build Coastguard Worker } 2819*7c356e86SAndroid Build Coastguard Worker fnd=$(typeset -f foo) 2820*7c356e86SAndroid Build Coastguard Worker print -r -- "$fnd" 2821*7c356e86SAndroid Build Coastguard Worker function foo { 2822*7c356e86SAndroid Build Coastguard Worker echo blub 2823*7c356e86SAndroid Build Coastguard Worker } 2824*7c356e86SAndroid Build Coastguard Worker foo 2825*7c356e86SAndroid Build Coastguard Worker eval "$fnd" 2826*7c356e86SAndroid Build Coastguard Worker foo 2827*7c356e86SAndroid Build Coastguard Worker # rather nonsensical, but… 2828*7c356e86SAndroid Build Coastguard Worker vd=<<<"=d $x \x40=" 2829*7c356e86SAndroid Build Coastguard Worker ve=<<<'=e $x \x40=' 2830*7c356e86SAndroid Build Coastguard Worker vf=<<<$'=f $x \x40=' 2831*7c356e86SAndroid Build Coastguard Worker # now check 2832*7c356e86SAndroid Build Coastguard Worker print -r -- "| va={$va} vb={$vb} vc={$vc} vd={$vd} ve={$ve} vf={$vf} |" 2833*7c356e86SAndroid Build Coastguard Worker # check append 2834*7c356e86SAndroid Build Coastguard Worker v=<<-EOF 2835*7c356e86SAndroid Build Coastguard Worker vapp1 2836*7c356e86SAndroid Build Coastguard Worker EOF 2837*7c356e86SAndroid Build Coastguard Worker v+=<<-EOF 2838*7c356e86SAndroid Build Coastguard Worker vapp2 2839*7c356e86SAndroid Build Coastguard Worker EOF 2840*7c356e86SAndroid Build Coastguard Worker print -r -- "| ${v//$'\n'/^} |" 2841*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2842*7c356e86SAndroid Build Coastguard Worker function foo { 2843*7c356e86SAndroid Build Coastguard Worker vc=<<-EOF 2844*7c356e86SAndroid Build Coastguard Worker =c $x \x40= 2845*7c356e86SAndroid Build Coastguard Worker EOF 2846*7c356e86SAndroid Build Coastguard Worker 2847*7c356e86SAndroid Build Coastguard Worker } 2848*7c356e86SAndroid Build Coastguard Worker blub 2849*7c356e86SAndroid Build Coastguard Worker | va={=a u \x40= 2850*7c356e86SAndroid Build Coastguard Worker } vb={=b $x \x40= 2851*7c356e86SAndroid Build Coastguard Worker } vc={=c u \x40= 2852*7c356e86SAndroid Build Coastguard Worker } vd={=d u \x40= 2853*7c356e86SAndroid Build Coastguard Worker } ve={=e $x \x40= 2854*7c356e86SAndroid Build Coastguard Worker } vf={=f $x @= 2855*7c356e86SAndroid Build Coastguard Worker } | 2856*7c356e86SAndroid Build Coastguard Worker | vapp1^vapp2^ | 2857*7c356e86SAndroid Build Coastguard Worker--- 2858*7c356e86SAndroid Build Coastguard Workername: heredoc-10-ebcdic 2859*7c356e86SAndroid Build Coastguard Workerdescription: 2860*7c356e86SAndroid Build Coastguard Worker Check direct here document assignment 2861*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no 2862*7c356e86SAndroid Build Coastguard Workerstdin: 2863*7c356e86SAndroid Build Coastguard Worker x=u 2864*7c356e86SAndroid Build Coastguard Worker va=<<EOF 2865*7c356e86SAndroid Build Coastguard Worker =a $x \x7C= 2866*7c356e86SAndroid Build Coastguard Worker EOF 2867*7c356e86SAndroid Build Coastguard Worker vb=<<'EOF' 2868*7c356e86SAndroid Build Coastguard Worker =b $x \x7C= 2869*7c356e86SAndroid Build Coastguard Worker EOF 2870*7c356e86SAndroid Build Coastguard Worker function foo { 2871*7c356e86SAndroid Build Coastguard Worker vc=<<-EOF 2872*7c356e86SAndroid Build Coastguard Worker =c $x \x7C= 2873*7c356e86SAndroid Build Coastguard Worker EOF 2874*7c356e86SAndroid Build Coastguard Worker } 2875*7c356e86SAndroid Build Coastguard Worker fnd=$(typeset -f foo) 2876*7c356e86SAndroid Build Coastguard Worker print -r -- "$fnd" 2877*7c356e86SAndroid Build Coastguard Worker function foo { 2878*7c356e86SAndroid Build Coastguard Worker echo blub 2879*7c356e86SAndroid Build Coastguard Worker } 2880*7c356e86SAndroid Build Coastguard Worker foo 2881*7c356e86SAndroid Build Coastguard Worker eval "$fnd" 2882*7c356e86SAndroid Build Coastguard Worker foo 2883*7c356e86SAndroid Build Coastguard Worker # rather nonsensical, but… 2884*7c356e86SAndroid Build Coastguard Worker vd=<<<"=d $x \x7C=" 2885*7c356e86SAndroid Build Coastguard Worker ve=<<<'=e $x \x7C=' 2886*7c356e86SAndroid Build Coastguard Worker vf=<<<$'=f $x \x7C=' 2887*7c356e86SAndroid Build Coastguard Worker # now check 2888*7c356e86SAndroid Build Coastguard Worker print -r -- "| va={$va} vb={$vb} vc={$vc} vd={$vd} ve={$ve} vf={$vf} |" 2889*7c356e86SAndroid Build Coastguard Worker # check append 2890*7c356e86SAndroid Build Coastguard Worker v=<<-EOF 2891*7c356e86SAndroid Build Coastguard Worker vapp1 2892*7c356e86SAndroid Build Coastguard Worker EOF 2893*7c356e86SAndroid Build Coastguard Worker v+=<<-EOF 2894*7c356e86SAndroid Build Coastguard Worker vapp2 2895*7c356e86SAndroid Build Coastguard Worker EOF 2896*7c356e86SAndroid Build Coastguard Worker print -r -- "| ${v//$'\n'/^} |" 2897*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2898*7c356e86SAndroid Build Coastguard Worker function foo { 2899*7c356e86SAndroid Build Coastguard Worker vc=<<-EOF 2900*7c356e86SAndroid Build Coastguard Worker =c $x \x7C= 2901*7c356e86SAndroid Build Coastguard Worker EOF 2902*7c356e86SAndroid Build Coastguard Worker 2903*7c356e86SAndroid Build Coastguard Worker } 2904*7c356e86SAndroid Build Coastguard Worker blub 2905*7c356e86SAndroid Build Coastguard Worker | va={=a u \x7C= 2906*7c356e86SAndroid Build Coastguard Worker } vb={=b $x \x7C= 2907*7c356e86SAndroid Build Coastguard Worker } vc={=c u \x7C= 2908*7c356e86SAndroid Build Coastguard Worker } vd={=d u \x7C= 2909*7c356e86SAndroid Build Coastguard Worker } ve={=e $x \x7C= 2910*7c356e86SAndroid Build Coastguard Worker } vf={=f $x @= 2911*7c356e86SAndroid Build Coastguard Worker } | 2912*7c356e86SAndroid Build Coastguard Worker | vapp1^vapp2^ | 2913*7c356e86SAndroid Build Coastguard Worker--- 2914*7c356e86SAndroid Build Coastguard Workername: heredoc-11 2915*7c356e86SAndroid Build Coastguard Workerdescription: 2916*7c356e86SAndroid Build Coastguard Worker Check here documents with no or empty delimiter 2917*7c356e86SAndroid Build Coastguard Workerstdin: 2918*7c356e86SAndroid Build Coastguard Worker x=u 2919*7c356e86SAndroid Build Coastguard Worker va=<< 2920*7c356e86SAndroid Build Coastguard Worker =a $x \x40= 2921*7c356e86SAndroid Build Coastguard Worker << 2922*7c356e86SAndroid Build Coastguard Worker vb=<<'' 2923*7c356e86SAndroid Build Coastguard Worker =b $x \x40= 2924*7c356e86SAndroid Build Coastguard Worker 2925*7c356e86SAndroid Build Coastguard Worker function foo { 2926*7c356e86SAndroid Build Coastguard Worker vc=<<- 2927*7c356e86SAndroid Build Coastguard Worker =c $x \x40= 2928*7c356e86SAndroid Build Coastguard Worker << 2929*7c356e86SAndroid Build Coastguard Worker vd=<<-'' 2930*7c356e86SAndroid Build Coastguard Worker =d $x \x40= 2931*7c356e86SAndroid Build Coastguard Worker 2932*7c356e86SAndroid Build Coastguard Worker } 2933*7c356e86SAndroid Build Coastguard Worker fnd=$(typeset -f foo) 2934*7c356e86SAndroid Build Coastguard Worker print -r -- "$fnd" 2935*7c356e86SAndroid Build Coastguard Worker function foo { 2936*7c356e86SAndroid Build Coastguard Worker echo blub 2937*7c356e86SAndroid Build Coastguard Worker } 2938*7c356e86SAndroid Build Coastguard Worker foo 2939*7c356e86SAndroid Build Coastguard Worker eval "$fnd" 2940*7c356e86SAndroid Build Coastguard Worker foo 2941*7c356e86SAndroid Build Coastguard Worker print -r -- "| va={$va} vb={$vb} vc={$vc} vd={$vd} |" 2942*7c356e86SAndroid Build Coastguard Worker x=y 2943*7c356e86SAndroid Build Coastguard Worker foo 2944*7c356e86SAndroid Build Coastguard Worker typeset -f foo 2945*7c356e86SAndroid Build Coastguard Worker print -r -- "| vc={$vc} vd={$vd} |" 2946*7c356e86SAndroid Build Coastguard Worker # check append 2947*7c356e86SAndroid Build Coastguard Worker v=<<- 2948*7c356e86SAndroid Build Coastguard Worker vapp1 2949*7c356e86SAndroid Build Coastguard Worker << 2950*7c356e86SAndroid Build Coastguard Worker v+=<<-'' 2951*7c356e86SAndroid Build Coastguard Worker vapp2 2952*7c356e86SAndroid Build Coastguard Worker 2953*7c356e86SAndroid Build Coastguard Worker print -r -- "| ${v//$'\n'/^} |" 2954*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 2955*7c356e86SAndroid Build Coastguard Worker function foo { 2956*7c356e86SAndroid Build Coastguard Worker vc=<<- 2957*7c356e86SAndroid Build Coastguard Worker =c $x \x40= 2958*7c356e86SAndroid Build Coastguard Worker << 2959*7c356e86SAndroid Build Coastguard Worker 2960*7c356e86SAndroid Build Coastguard Worker vd=<<-"" 2961*7c356e86SAndroid Build Coastguard Worker =d $x \x40= 2962*7c356e86SAndroid Build Coastguard Worker 2963*7c356e86SAndroid Build Coastguard Worker 2964*7c356e86SAndroid Build Coastguard Worker } 2965*7c356e86SAndroid Build Coastguard Worker blub 2966*7c356e86SAndroid Build Coastguard Worker | va={=a u \x40= 2967*7c356e86SAndroid Build Coastguard Worker } vb={=b $x \x40= 2968*7c356e86SAndroid Build Coastguard Worker } vc={=c u \x40= 2969*7c356e86SAndroid Build Coastguard Worker } vd={=d $x \x40= 2970*7c356e86SAndroid Build Coastguard Worker } | 2971*7c356e86SAndroid Build Coastguard Worker function foo { 2972*7c356e86SAndroid Build Coastguard Worker vc=<<- 2973*7c356e86SAndroid Build Coastguard Worker =c $x \x40= 2974*7c356e86SAndroid Build Coastguard Worker << 2975*7c356e86SAndroid Build Coastguard Worker 2976*7c356e86SAndroid Build Coastguard Worker vd=<<-"" 2977*7c356e86SAndroid Build Coastguard Worker =d $x \x40= 2978*7c356e86SAndroid Build Coastguard Worker 2979*7c356e86SAndroid Build Coastguard Worker 2980*7c356e86SAndroid Build Coastguard Worker } 2981*7c356e86SAndroid Build Coastguard Worker | vc={=c y \x40= 2982*7c356e86SAndroid Build Coastguard Worker } vd={=d $x \x40= 2983*7c356e86SAndroid Build Coastguard Worker } | 2984*7c356e86SAndroid Build Coastguard Worker | vapp1^vapp2^ | 2985*7c356e86SAndroid Build Coastguard Worker--- 2986*7c356e86SAndroid Build Coastguard Workername: heredoc-12 2987*7c356e86SAndroid Build Coastguard Workerdescription: 2988*7c356e86SAndroid Build Coastguard Worker Check here documents can use $* and $@; note shells vary: 2989*7c356e86SAndroid Build Coastguard Worker • pdksh 5.2.14 acts the same 2990*7c356e86SAndroid Build Coastguard Worker • dash has 1 and 2 the same but 3 lacks the space 2991*7c356e86SAndroid Build Coastguard Worker • ksh93, bash4 differ in 2 by using space ipv colon 2992*7c356e86SAndroid Build Coastguard Workerstdin: 2993*7c356e86SAndroid Build Coastguard Worker set -- a b 2994*7c356e86SAndroid Build Coastguard Worker nl=' 2995*7c356e86SAndroid Build Coastguard Worker ' 2996*7c356e86SAndroid Build Coastguard Worker IFS=" $nl"; n=1 2997*7c356e86SAndroid Build Coastguard Worker cat <<EOF 2998*7c356e86SAndroid Build Coastguard Worker $n foo $* foo 2999*7c356e86SAndroid Build Coastguard Worker $n bar "$*" bar 3000*7c356e86SAndroid Build Coastguard Worker $n baz $@ baz 3001*7c356e86SAndroid Build Coastguard Worker $n bla "$@" bla 3002*7c356e86SAndroid Build Coastguard Worker EOF 3003*7c356e86SAndroid Build Coastguard Worker IFS=":"; n=2 3004*7c356e86SAndroid Build Coastguard Worker cat <<EOF 3005*7c356e86SAndroid Build Coastguard Worker $n foo $* foo 3006*7c356e86SAndroid Build Coastguard Worker $n bar "$*" bar 3007*7c356e86SAndroid Build Coastguard Worker $n baz $@ baz 3008*7c356e86SAndroid Build Coastguard Worker $n bla "$@" bla 3009*7c356e86SAndroid Build Coastguard Worker EOF 3010*7c356e86SAndroid Build Coastguard Worker IFS=; n=3 3011*7c356e86SAndroid Build Coastguard Worker cat <<EOF 3012*7c356e86SAndroid Build Coastguard Worker $n foo $* foo 3013*7c356e86SAndroid Build Coastguard Worker $n bar "$*" bar 3014*7c356e86SAndroid Build Coastguard Worker $n baz $@ baz 3015*7c356e86SAndroid Build Coastguard Worker $n bla "$@" bla 3016*7c356e86SAndroid Build Coastguard Worker EOF 3017*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3018*7c356e86SAndroid Build Coastguard Worker 1 foo a b foo 3019*7c356e86SAndroid Build Coastguard Worker 1 bar "a b" bar 3020*7c356e86SAndroid Build Coastguard Worker 1 baz a b baz 3021*7c356e86SAndroid Build Coastguard Worker 1 bla "a b" bla 3022*7c356e86SAndroid Build Coastguard Worker 2 foo a:b foo 3023*7c356e86SAndroid Build Coastguard Worker 2 bar "a:b" bar 3024*7c356e86SAndroid Build Coastguard Worker 2 baz a:b baz 3025*7c356e86SAndroid Build Coastguard Worker 2 bla "a:b" bla 3026*7c356e86SAndroid Build Coastguard Worker 3 foo a b foo 3027*7c356e86SAndroid Build Coastguard Worker 3 bar "a b" bar 3028*7c356e86SAndroid Build Coastguard Worker 3 baz a b baz 3029*7c356e86SAndroid Build Coastguard Worker 3 bla "a b" bla 3030*7c356e86SAndroid Build Coastguard Worker--- 3031*7c356e86SAndroid Build Coastguard Workername: heredoc-14 3032*7c356e86SAndroid Build Coastguard Workerdescription: 3033*7c356e86SAndroid Build Coastguard Worker Check that using multiple here documents works 3034*7c356e86SAndroid Build Coastguard Workerstdin: 3035*7c356e86SAndroid Build Coastguard Worker foo() { 3036*7c356e86SAndroid Build Coastguard Worker echo "got $(cat) on stdin" 3037*7c356e86SAndroid Build Coastguard Worker echo "got $(cat <&4) on fd#4" 3038*7c356e86SAndroid Build Coastguard Worker echo "got $(cat <&5) on fd#5" 3039*7c356e86SAndroid Build Coastguard Worker } 3040*7c356e86SAndroid Build Coastguard Worker bar() { 3041*7c356e86SAndroid Build Coastguard Worker foo 4<<-a <<-b 5<<-c 3042*7c356e86SAndroid Build Coastguard Worker four 3043*7c356e86SAndroid Build Coastguard Worker a 3044*7c356e86SAndroid Build Coastguard Worker zero 3045*7c356e86SAndroid Build Coastguard Worker b 3046*7c356e86SAndroid Build Coastguard Worker five 3047*7c356e86SAndroid Build Coastguard Worker c 3048*7c356e86SAndroid Build Coastguard Worker } 3049*7c356e86SAndroid Build Coastguard Worker x=$(typeset -f bar) 3050*7c356e86SAndroid Build Coastguard Worker eval "$x" 3051*7c356e86SAndroid Build Coastguard Worker y=$(typeset -f bar) 3052*7c356e86SAndroid Build Coastguard Worker [[ $x = "$y" ]]; echo $? 3053*7c356e86SAndroid Build Coastguard Worker typeset -f bar 3054*7c356e86SAndroid Build Coastguard Worker bar 3055*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3056*7c356e86SAndroid Build Coastguard Worker 0 3057*7c356e86SAndroid Build Coastguard Worker bar() { 3058*7c356e86SAndroid Build Coastguard Worker \foo 4<<-a <<-b 5<<-c 3059*7c356e86SAndroid Build Coastguard Worker four 3060*7c356e86SAndroid Build Coastguard Worker a 3061*7c356e86SAndroid Build Coastguard Worker zero 3062*7c356e86SAndroid Build Coastguard Worker b 3063*7c356e86SAndroid Build Coastguard Worker five 3064*7c356e86SAndroid Build Coastguard Worker c 3065*7c356e86SAndroid Build Coastguard Worker 3066*7c356e86SAndroid Build Coastguard Worker } 3067*7c356e86SAndroid Build Coastguard Worker got zero on stdin 3068*7c356e86SAndroid Build Coastguard Worker got four on fd#4 3069*7c356e86SAndroid Build Coastguard Worker got five on fd#5 3070*7c356e86SAndroid Build Coastguard Worker--- 3071*7c356e86SAndroid Build Coastguard Workername: heredoc-15 3072*7c356e86SAndroid Build Coastguard Workerdescription: 3073*7c356e86SAndroid Build Coastguard Worker Check high-bit7 separators work 3074*7c356e86SAndroid Build Coastguard Workerstdin: 3075*7c356e86SAndroid Build Coastguard Worker u=ä 3076*7c356e86SAndroid Build Coastguard Worker tr a-z A-Z <<-… 3077*7c356e86SAndroid Build Coastguard Worker m${u}h 3078*7c356e86SAndroid Build Coastguard Worker … 3079*7c356e86SAndroid Build Coastguard Worker echo ok 3080*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3081*7c356e86SAndroid Build Coastguard Worker MäH 3082*7c356e86SAndroid Build Coastguard Worker ok 3083*7c356e86SAndroid Build Coastguard Worker--- 3084*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-1 3085*7c356e86SAndroid Build Coastguard Workerdescription: 3086*7c356e86SAndroid Build Coastguard Worker Tests for here documents in COMSUB, taken from Austin ML 3087*7c356e86SAndroid Build Coastguard Workerstdin: 3088*7c356e86SAndroid Build Coastguard Worker text=$(cat <<EOF 3089*7c356e86SAndroid Build Coastguard Worker here is the text 3090*7c356e86SAndroid Build Coastguard Worker EOF) 3091*7c356e86SAndroid Build Coastguard Worker echo = $text = 3092*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3093*7c356e86SAndroid Build Coastguard Worker = here is the text = 3094*7c356e86SAndroid Build Coastguard Worker--- 3095*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-2 3096*7c356e86SAndroid Build Coastguard Workerdescription: 3097*7c356e86SAndroid Build Coastguard Worker Tests for here documents in COMSUB, taken from Austin ML 3098*7c356e86SAndroid Build Coastguard Workerstdin: 3099*7c356e86SAndroid Build Coastguard Worker unbalanced=$(cat <<EOF 3100*7c356e86SAndroid Build Coastguard Worker this paren ) is a problem 3101*7c356e86SAndroid Build Coastguard Worker EOF) 3102*7c356e86SAndroid Build Coastguard Worker echo = $unbalanced = 3103*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3104*7c356e86SAndroid Build Coastguard Worker = this paren ) is a problem = 3105*7c356e86SAndroid Build Coastguard Worker--- 3106*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-3 3107*7c356e86SAndroid Build Coastguard Workerdescription: 3108*7c356e86SAndroid Build Coastguard Worker Tests for here documents in COMSUB, taken from Austin ML 3109*7c356e86SAndroid Build Coastguard Workerstdin: 3110*7c356e86SAndroid Build Coastguard Worker balanced=$(cat <<EOF 3111*7c356e86SAndroid Build Coastguard Worker these parens ( ) are not a problem 3112*7c356e86SAndroid Build Coastguard Worker EOF) 3113*7c356e86SAndroid Build Coastguard Worker echo = $balanced = 3114*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3115*7c356e86SAndroid Build Coastguard Worker = these parens ( ) are not a problem = 3116*7c356e86SAndroid Build Coastguard Worker--- 3117*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-4 3118*7c356e86SAndroid Build Coastguard Workerdescription: 3119*7c356e86SAndroid Build Coastguard Worker Tests for here documents in COMSUB, taken from Austin ML 3120*7c356e86SAndroid Build Coastguard Workerstdin: 3121*7c356e86SAndroid Build Coastguard Worker balanced=$(cat <<EOF 3122*7c356e86SAndroid Build Coastguard Worker these parens \( ) are a problem 3123*7c356e86SAndroid Build Coastguard Worker EOF) 3124*7c356e86SAndroid Build Coastguard Worker echo = $balanced = 3125*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3126*7c356e86SAndroid Build Coastguard Worker = these parens \( ) are a problem = 3127*7c356e86SAndroid Build Coastguard Worker--- 3128*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-5 3129*7c356e86SAndroid Build Coastguard Workerdescription: 3130*7c356e86SAndroid Build Coastguard Worker Check heredoc and COMSUB mixture in input 3131*7c356e86SAndroid Build Coastguard Workerstdin: 3132*7c356e86SAndroid Build Coastguard Worker prefix() { sed -e "s/^/$1:/"; } 3133*7c356e86SAndroid Build Coastguard Worker XXX() { echo x-en; } 3134*7c356e86SAndroid Build Coastguard Worker YYY() { echo y-es; } 3135*7c356e86SAndroid Build Coastguard Worker 3136*7c356e86SAndroid Build Coastguard Worker prefix A <<XXX && echo "$(prefix B <<XXX 3137*7c356e86SAndroid Build Coastguard Worker echo line 1 3138*7c356e86SAndroid Build Coastguard Worker XXX 3139*7c356e86SAndroid Build Coastguard Worker echo line 2)" && prefix C <<YYY 3140*7c356e86SAndroid Build Coastguard Worker echo line 3 3141*7c356e86SAndroid Build Coastguard Worker XXX 3142*7c356e86SAndroid Build Coastguard Worker echo line 4)" 3143*7c356e86SAndroid Build Coastguard Worker echo line 5 3144*7c356e86SAndroid Build Coastguard Worker YYY 3145*7c356e86SAndroid Build Coastguard Worker XXX 3146*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3147*7c356e86SAndroid Build Coastguard Worker A:echo line 3 3148*7c356e86SAndroid Build Coastguard Worker B:echo line 1 3149*7c356e86SAndroid Build Coastguard Worker line 2 3150*7c356e86SAndroid Build Coastguard Worker C:echo line 4)" 3151*7c356e86SAndroid Build Coastguard Worker C:echo line 5 3152*7c356e86SAndroid Build Coastguard Worker x-en 3153*7c356e86SAndroid Build Coastguard Worker--- 3154*7c356e86SAndroid Build Coastguard Workername: heredoc-comsub-6 3155*7c356e86SAndroid Build Coastguard Workerdescription: 3156*7c356e86SAndroid Build Coastguard Worker Check here documents and here strings can be used 3157*7c356e86SAndroid Build Coastguard Worker without a specific command, like $(<…) (extension) 3158*7c356e86SAndroid Build Coastguard Workerstdin: 3159*7c356e86SAndroid Build Coastguard Worker foo=bar 3160*7c356e86SAndroid Build Coastguard Worker x=$(<<<EO${foo}F) 3161*7c356e86SAndroid Build Coastguard Worker echo "3<$x>" 3162*7c356e86SAndroid Build Coastguard Worker y=$(<<-EOF 3163*7c356e86SAndroid Build Coastguard Worker hi! 3164*7c356e86SAndroid Build Coastguard Worker 3165*7c356e86SAndroid Build Coastguard Worker $foo) is not a problem 3166*7c356e86SAndroid Build Coastguard Worker 3167*7c356e86SAndroid Build Coastguard Worker 3168*7c356e86SAndroid Build Coastguard Worker EOF) 3169*7c356e86SAndroid Build Coastguard Worker echo "7<$y>" 3170*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3171*7c356e86SAndroid Build Coastguard Worker 3<EObarF> 3172*7c356e86SAndroid Build Coastguard Worker 7<hi! 3173*7c356e86SAndroid Build Coastguard Worker 3174*7c356e86SAndroid Build Coastguard Worker bar) is not a problem> 3175*7c356e86SAndroid Build Coastguard Worker--- 3176*7c356e86SAndroid Build Coastguard Workername: heredoc-subshell-1 3177*7c356e86SAndroid Build Coastguard Workerdescription: 3178*7c356e86SAndroid Build Coastguard Worker Tests for here documents in subshells, taken from Austin ML 3179*7c356e86SAndroid Build Coastguard Workerstdin: 3180*7c356e86SAndroid Build Coastguard Worker (cat <<EOF 3181*7c356e86SAndroid Build Coastguard Worker some text 3182*7c356e86SAndroid Build Coastguard Worker EOF) 3183*7c356e86SAndroid Build Coastguard Worker echo end 3184*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3185*7c356e86SAndroid Build Coastguard Worker some text 3186*7c356e86SAndroid Build Coastguard Worker end 3187*7c356e86SAndroid Build Coastguard Worker--- 3188*7c356e86SAndroid Build Coastguard Workername: heredoc-subshell-2 3189*7c356e86SAndroid Build Coastguard Workerdescription: 3190*7c356e86SAndroid Build Coastguard Worker Tests for here documents in subshells, taken from Austin ML 3191*7c356e86SAndroid Build Coastguard Workerstdin: 3192*7c356e86SAndroid Build Coastguard Worker (cat <<EOF 3193*7c356e86SAndroid Build Coastguard Worker some text 3194*7c356e86SAndroid Build Coastguard Worker EOF 3195*7c356e86SAndroid Build Coastguard Worker ) 3196*7c356e86SAndroid Build Coastguard Worker echo end 3197*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3198*7c356e86SAndroid Build Coastguard Worker some text 3199*7c356e86SAndroid Build Coastguard Worker end 3200*7c356e86SAndroid Build Coastguard Worker--- 3201*7c356e86SAndroid Build Coastguard Workername: heredoc-subshell-3 3202*7c356e86SAndroid Build Coastguard Workerdescription: 3203*7c356e86SAndroid Build Coastguard Worker Tests for here documents in subshells, taken from Austin ML 3204*7c356e86SAndroid Build Coastguard Workerstdin: 3205*7c356e86SAndroid Build Coastguard Worker (cat <<EOF; ) 3206*7c356e86SAndroid Build Coastguard Worker some text 3207*7c356e86SAndroid Build Coastguard Worker EOF 3208*7c356e86SAndroid Build Coastguard Worker echo end 3209*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3210*7c356e86SAndroid Build Coastguard Worker some text 3211*7c356e86SAndroid Build Coastguard Worker end 3212*7c356e86SAndroid Build Coastguard Worker--- 3213*7c356e86SAndroid Build Coastguard Workername: heredoc-weird-1 3214*7c356e86SAndroid Build Coastguard Workerdescription: 3215*7c356e86SAndroid Build Coastguard Worker Tests for here documents, taken from Austin ML 3216*7c356e86SAndroid Build Coastguard Worker Documents current state in mksh, *NOT* necessarily correct! 3217*7c356e86SAndroid Build Coastguard Workerstdin: 3218*7c356e86SAndroid Build Coastguard Worker cat <<END 3219*7c356e86SAndroid Build Coastguard Worker hello 3220*7c356e86SAndroid Build Coastguard Worker END\ 3221*7c356e86SAndroid Build Coastguard Worker END 3222*7c356e86SAndroid Build Coastguard Worker END 3223*7c356e86SAndroid Build Coastguard Worker echo end 3224*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3225*7c356e86SAndroid Build Coastguard Worker hello 3226*7c356e86SAndroid Build Coastguard Worker ENDEND 3227*7c356e86SAndroid Build Coastguard Worker end 3228*7c356e86SAndroid Build Coastguard Worker--- 3229*7c356e86SAndroid Build Coastguard Workername: heredoc-weird-2 3230*7c356e86SAndroid Build Coastguard Workerdescription: 3231*7c356e86SAndroid Build Coastguard Worker Tests for here documents, taken from Austin ML 3232*7c356e86SAndroid Build Coastguard Workerstdin: 3233*7c356e86SAndroid Build Coastguard Worker cat <<' END ' 3234*7c356e86SAndroid Build Coastguard Worker hello 3235*7c356e86SAndroid Build Coastguard Worker END 3236*7c356e86SAndroid Build Coastguard Worker echo end 3237*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3238*7c356e86SAndroid Build Coastguard Worker hello 3239*7c356e86SAndroid Build Coastguard Worker end 3240*7c356e86SAndroid Build Coastguard Worker--- 3241*7c356e86SAndroid Build Coastguard Workername: heredoc-weird-4 3242*7c356e86SAndroid Build Coastguard Workerdescription: 3243*7c356e86SAndroid Build Coastguard Worker Tests for here documents, taken from Austin ML 3244*7c356e86SAndroid Build Coastguard Worker Documents current state in mksh, *NOT* necessarily correct! 3245*7c356e86SAndroid Build Coastguard Workerstdin: 3246*7c356e86SAndroid Build Coastguard Worker cat <<END 3247*7c356e86SAndroid Build Coastguard Worker hello\ 3248*7c356e86SAndroid Build Coastguard Worker END 3249*7c356e86SAndroid Build Coastguard Worker END 3250*7c356e86SAndroid Build Coastguard Worker echo end 3251*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3252*7c356e86SAndroid Build Coastguard Worker helloEND 3253*7c356e86SAndroid Build Coastguard Worker end 3254*7c356e86SAndroid Build Coastguard Worker--- 3255*7c356e86SAndroid Build Coastguard Workername: heredoc-weird-5 3256*7c356e86SAndroid Build Coastguard Workerdescription: 3257*7c356e86SAndroid Build Coastguard Worker Tests for here documents, taken from Austin ML 3258*7c356e86SAndroid Build Coastguard Worker Documents current state in mksh, *NOT* necessarily correct! 3259*7c356e86SAndroid Build Coastguard Workerstdin: 3260*7c356e86SAndroid Build Coastguard Worker cat <<END 3261*7c356e86SAndroid Build Coastguard Worker hello 3262*7c356e86SAndroid Build Coastguard Worker \END 3263*7c356e86SAndroid Build Coastguard Worker END 3264*7c356e86SAndroid Build Coastguard Worker echo end 3265*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3266*7c356e86SAndroid Build Coastguard Worker hello 3267*7c356e86SAndroid Build Coastguard Worker \END 3268*7c356e86SAndroid Build Coastguard Worker end 3269*7c356e86SAndroid Build Coastguard Worker--- 3270*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-1 3271*7c356e86SAndroid Build Coastguard Workerdescription: 3272*7c356e86SAndroid Build Coastguard Worker Check that heredoc temp files aren't removed too soon or too late. 3273*7c356e86SAndroid Build Coastguard Worker Heredoc in simple command. 3274*7c356e86SAndroid Build Coastguard Workerstdin: 3275*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD 3276*7c356e86SAndroid Build Coastguard Worker eval ' 3277*7c356e86SAndroid Build Coastguard Worker cat <<- EOF 3278*7c356e86SAndroid Build Coastguard Worker hi 3279*7c356e86SAndroid Build Coastguard Worker EOF 3280*7c356e86SAndroid Build Coastguard Worker for i in a b ; do 3281*7c356e86SAndroid Build Coastguard Worker cat <<- EOF 3282*7c356e86SAndroid Build Coastguard Worker more 3283*7c356e86SAndroid Build Coastguard Worker EOF 3284*7c356e86SAndroid Build Coastguard Worker done 3285*7c356e86SAndroid Build Coastguard Worker ' & 3286*7c356e86SAndroid Build Coastguard Worker sleep 1 3287*7c356e86SAndroid Build Coastguard Worker echo Left overs: * 3288*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3289*7c356e86SAndroid Build Coastguard Worker hi 3290*7c356e86SAndroid Build Coastguard Worker more 3291*7c356e86SAndroid Build Coastguard Worker more 3292*7c356e86SAndroid Build Coastguard Worker Left overs: * 3293*7c356e86SAndroid Build Coastguard Worker--- 3294*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-2 3295*7c356e86SAndroid Build Coastguard Workerdescription: 3296*7c356e86SAndroid Build Coastguard Worker Check that heredoc temp files aren't removed too soon or too late. 3297*7c356e86SAndroid Build Coastguard Worker Heredoc in function, multiple calls to function. 3298*7c356e86SAndroid Build Coastguard Workerstdin: 3299*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD 3300*7c356e86SAndroid Build Coastguard Worker eval ' 3301*7c356e86SAndroid Build Coastguard Worker foo() { 3302*7c356e86SAndroid Build Coastguard Worker cat <<- EOF 3303*7c356e86SAndroid Build Coastguard Worker hi 3304*7c356e86SAndroid Build Coastguard Worker EOF 3305*7c356e86SAndroid Build Coastguard Worker } 3306*7c356e86SAndroid Build Coastguard Worker foo 3307*7c356e86SAndroid Build Coastguard Worker foo 3308*7c356e86SAndroid Build Coastguard Worker ' & 3309*7c356e86SAndroid Build Coastguard Worker sleep 1 3310*7c356e86SAndroid Build Coastguard Worker echo Left overs: * 3311*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3312*7c356e86SAndroid Build Coastguard Worker hi 3313*7c356e86SAndroid Build Coastguard Worker hi 3314*7c356e86SAndroid Build Coastguard Worker Left overs: * 3315*7c356e86SAndroid Build Coastguard Worker--- 3316*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-3 3317*7c356e86SAndroid Build Coastguard Workerdescription: 3318*7c356e86SAndroid Build Coastguard Worker Check that heredoc temp files aren't removed too soon or too late. 3319*7c356e86SAndroid Build Coastguard Worker Heredoc in function in loop, multiple calls to function. 3320*7c356e86SAndroid Build Coastguard Workerstdin: 3321*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD 3322*7c356e86SAndroid Build Coastguard Worker eval ' 3323*7c356e86SAndroid Build Coastguard Worker foo() { 3324*7c356e86SAndroid Build Coastguard Worker cat <<- EOF 3325*7c356e86SAndroid Build Coastguard Worker hi 3326*7c356e86SAndroid Build Coastguard Worker EOF 3327*7c356e86SAndroid Build Coastguard Worker } 3328*7c356e86SAndroid Build Coastguard Worker for i in a b; do 3329*7c356e86SAndroid Build Coastguard Worker foo 3330*7c356e86SAndroid Build Coastguard Worker foo() { 3331*7c356e86SAndroid Build Coastguard Worker cat <<- EOF 3332*7c356e86SAndroid Build Coastguard Worker folks $i 3333*7c356e86SAndroid Build Coastguard Worker EOF 3334*7c356e86SAndroid Build Coastguard Worker } 3335*7c356e86SAndroid Build Coastguard Worker done 3336*7c356e86SAndroid Build Coastguard Worker foo 3337*7c356e86SAndroid Build Coastguard Worker ' & 3338*7c356e86SAndroid Build Coastguard Worker sleep 1 3339*7c356e86SAndroid Build Coastguard Worker echo Left overs: * 3340*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3341*7c356e86SAndroid Build Coastguard Worker hi 3342*7c356e86SAndroid Build Coastguard Worker folks b 3343*7c356e86SAndroid Build Coastguard Worker folks b 3344*7c356e86SAndroid Build Coastguard Worker Left overs: * 3345*7c356e86SAndroid Build Coastguard Worker--- 3346*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-4 3347*7c356e86SAndroid Build Coastguard Workerdescription: 3348*7c356e86SAndroid Build Coastguard Worker Check that heredoc temp files aren't removed too soon or too late. 3349*7c356e86SAndroid Build Coastguard Worker Backgrounded simple command with here doc 3350*7c356e86SAndroid Build Coastguard Workerstdin: 3351*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD 3352*7c356e86SAndroid Build Coastguard Worker eval ' 3353*7c356e86SAndroid Build Coastguard Worker cat <<- EOF & 3354*7c356e86SAndroid Build Coastguard Worker hi 3355*7c356e86SAndroid Build Coastguard Worker EOF 3356*7c356e86SAndroid Build Coastguard Worker ' & 3357*7c356e86SAndroid Build Coastguard Worker sleep 1 3358*7c356e86SAndroid Build Coastguard Worker echo Left overs: * 3359*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3360*7c356e86SAndroid Build Coastguard Worker hi 3361*7c356e86SAndroid Build Coastguard Worker Left overs: * 3362*7c356e86SAndroid Build Coastguard Worker--- 3363*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-5 3364*7c356e86SAndroid Build Coastguard Workerdescription: 3365*7c356e86SAndroid Build Coastguard Worker Check that heredoc temp files aren't removed too soon or too late. 3366*7c356e86SAndroid Build Coastguard Worker Backgrounded subshell command with here doc 3367*7c356e86SAndroid Build Coastguard Workerstdin: 3368*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD 3369*7c356e86SAndroid Build Coastguard Worker eval ' 3370*7c356e86SAndroid Build Coastguard Worker ( 3371*7c356e86SAndroid Build Coastguard Worker sleep 1 # so parent exits 3372*7c356e86SAndroid Build Coastguard Worker echo A 3373*7c356e86SAndroid Build Coastguard Worker cat <<- EOF 3374*7c356e86SAndroid Build Coastguard Worker hi 3375*7c356e86SAndroid Build Coastguard Worker EOF 3376*7c356e86SAndroid Build Coastguard Worker echo B 3377*7c356e86SAndroid Build Coastguard Worker ) & 3378*7c356e86SAndroid Build Coastguard Worker ' & 3379*7c356e86SAndroid Build Coastguard Worker sleep 5 3380*7c356e86SAndroid Build Coastguard Worker echo Left overs: * 3381*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3382*7c356e86SAndroid Build Coastguard Worker A 3383*7c356e86SAndroid Build Coastguard Worker hi 3384*7c356e86SAndroid Build Coastguard Worker B 3385*7c356e86SAndroid Build Coastguard Worker Left overs: * 3386*7c356e86SAndroid Build Coastguard Worker--- 3387*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-6 3388*7c356e86SAndroid Build Coastguard Workerdescription: 3389*7c356e86SAndroid Build Coastguard Worker Check that heredoc temp files aren't removed too soon or too late. 3390*7c356e86SAndroid Build Coastguard Worker Heredoc in pipeline. 3391*7c356e86SAndroid Build Coastguard Workerstdin: 3392*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD 3393*7c356e86SAndroid Build Coastguard Worker eval ' 3394*7c356e86SAndroid Build Coastguard Worker cat <<- EOF | sed "s/hi/HI/" 3395*7c356e86SAndroid Build Coastguard Worker hi 3396*7c356e86SAndroid Build Coastguard Worker EOF 3397*7c356e86SAndroid Build Coastguard Worker ' & 3398*7c356e86SAndroid Build Coastguard Worker sleep 1 3399*7c356e86SAndroid Build Coastguard Worker echo Left overs: * 3400*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3401*7c356e86SAndroid Build Coastguard Worker HI 3402*7c356e86SAndroid Build Coastguard Worker Left overs: * 3403*7c356e86SAndroid Build Coastguard Worker--- 3404*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-7 3405*7c356e86SAndroid Build Coastguard Workerdescription: 3406*7c356e86SAndroid Build Coastguard Worker Check that heredoc temp files aren't removed too soon or too late. 3407*7c356e86SAndroid Build Coastguard Worker Heredoc in backgrounded pipeline. 3408*7c356e86SAndroid Build Coastguard Workerstdin: 3409*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD 3410*7c356e86SAndroid Build Coastguard Worker eval ' 3411*7c356e86SAndroid Build Coastguard Worker cat <<- EOF | sed 's/hi/HI/' & 3412*7c356e86SAndroid Build Coastguard Worker hi 3413*7c356e86SAndroid Build Coastguard Worker EOF 3414*7c356e86SAndroid Build Coastguard Worker ' & 3415*7c356e86SAndroid Build Coastguard Worker sleep 1 3416*7c356e86SAndroid Build Coastguard Worker echo Left overs: * 3417*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3418*7c356e86SAndroid Build Coastguard Worker HI 3419*7c356e86SAndroid Build Coastguard Worker Left overs: * 3420*7c356e86SAndroid Build Coastguard Worker--- 3421*7c356e86SAndroid Build Coastguard Workername: heredoc-tmpfile-8 3422*7c356e86SAndroid Build Coastguard Workerdescription: 3423*7c356e86SAndroid Build Coastguard Worker Check that heredoc temp files aren't removed too soon or too 3424*7c356e86SAndroid Build Coastguard Worker late. Heredoc in function, backgrounded call to function. 3425*7c356e86SAndroid Build Coastguard Worker This check can fail on slow machines (<100 MHz), or Cygwin, 3426*7c356e86SAndroid Build Coastguard Worker that's normal. 3427*7c356e86SAndroid Build Coastguard Workerneed-pass: no 3428*7c356e86SAndroid Build Coastguard Workerstdin: 3429*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD 3430*7c356e86SAndroid Build Coastguard Worker # Background eval so main shell doesn't do parsing 3431*7c356e86SAndroid Build Coastguard Worker eval ' 3432*7c356e86SAndroid Build Coastguard Worker foo() { 3433*7c356e86SAndroid Build Coastguard Worker cat <<- EOF 3434*7c356e86SAndroid Build Coastguard Worker hi 3435*7c356e86SAndroid Build Coastguard Worker EOF 3436*7c356e86SAndroid Build Coastguard Worker } 3437*7c356e86SAndroid Build Coastguard Worker foo 3438*7c356e86SAndroid Build Coastguard Worker # sleep so eval can die 3439*7c356e86SAndroid Build Coastguard Worker (sleep 1; foo) & 3440*7c356e86SAndroid Build Coastguard Worker (sleep 1; foo) & 3441*7c356e86SAndroid Build Coastguard Worker foo 3442*7c356e86SAndroid Build Coastguard Worker ' & 3443*7c356e86SAndroid Build Coastguard Worker sleep 5 3444*7c356e86SAndroid Build Coastguard Worker echo Left overs: * 3445*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3446*7c356e86SAndroid Build Coastguard Worker hi 3447*7c356e86SAndroid Build Coastguard Worker hi 3448*7c356e86SAndroid Build Coastguard Worker hi 3449*7c356e86SAndroid Build Coastguard Worker hi 3450*7c356e86SAndroid Build Coastguard Worker Left overs: * 3451*7c356e86SAndroid Build Coastguard Worker--- 3452*7c356e86SAndroid Build Coastguard Workername: heredoc-quoting-unsubst 3453*7c356e86SAndroid Build Coastguard Workerdescription: 3454*7c356e86SAndroid Build Coastguard Worker Check for correct handling of quoted characters in 3455*7c356e86SAndroid Build Coastguard Worker here documents without substitution (marker is quoted). 3456*7c356e86SAndroid Build Coastguard Workerstdin: 3457*7c356e86SAndroid Build Coastguard Worker foo=bar 3458*7c356e86SAndroid Build Coastguard Worker cat <<-'EOF' 3459*7c356e86SAndroid Build Coastguard Worker x " \" \ \\ $ \$ `echo baz` \`echo baz\` $foo \$foo x 3460*7c356e86SAndroid Build Coastguard Worker EOF 3461*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3462*7c356e86SAndroid Build Coastguard Worker x " \" \ \\ $ \$ `echo baz` \`echo baz\` $foo \$foo x 3463*7c356e86SAndroid Build Coastguard Worker--- 3464*7c356e86SAndroid Build Coastguard Workername: heredoc-quoting-subst 3465*7c356e86SAndroid Build Coastguard Workerdescription: 3466*7c356e86SAndroid Build Coastguard Worker Check for correct handling of quoted characters in 3467*7c356e86SAndroid Build Coastguard Worker here documents with substitution (marker is not quoted). 3468*7c356e86SAndroid Build Coastguard Workerstdin: 3469*7c356e86SAndroid Build Coastguard Worker foo=bar 3470*7c356e86SAndroid Build Coastguard Worker cat <<-EOF 3471*7c356e86SAndroid Build Coastguard Worker x " \" \ \\ $ \$ `echo baz` \`echo baz\` $foo \$foo x 3472*7c356e86SAndroid Build Coastguard Worker EOF 3473*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3474*7c356e86SAndroid Build Coastguard Worker x " \" \ \ $ $ baz `echo baz` bar $foo x 3475*7c356e86SAndroid Build Coastguard Worker--- 3476*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-braces 3477*7c356e86SAndroid Build Coastguard Workerdescription: 3478*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside unquoted {} are treated as quotes 3479*7c356e86SAndroid Build Coastguard Workerstdin: 3480*7c356e86SAndroid Build Coastguard Worker foo=1 3481*7c356e86SAndroid Build Coastguard Worker echo ${foo:+'blah $foo'} 3482*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3483*7c356e86SAndroid Build Coastguard Worker blah $foo 3484*7c356e86SAndroid Build Coastguard Worker--- 3485*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-quoted-braces 3486*7c356e86SAndroid Build Coastguard Workerdescription: 3487*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside quoted {} are treated as 3488*7c356e86SAndroid Build Coastguard Worker normal char 3489*7c356e86SAndroid Build Coastguard Workerstdin: 3490*7c356e86SAndroid Build Coastguard Worker foo=1 3491*7c356e86SAndroid Build Coastguard Worker echo "${foo:+'blah $foo'}" 3492*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3493*7c356e86SAndroid Build Coastguard Worker 'blah 1' 3494*7c356e86SAndroid Build Coastguard Worker--- 3495*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-braces-nested 3496*7c356e86SAndroid Build Coastguard Workerdescription: 3497*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside unquoted {} are treated as quotes, 3498*7c356e86SAndroid Build Coastguard Worker even if that's inside a double-quoted command expansion 3499*7c356e86SAndroid Build Coastguard Workerstdin: 3500*7c356e86SAndroid Build Coastguard Worker foo=1 3501*7c356e86SAndroid Build Coastguard Worker echo "$( echo ${foo:+'blah $foo'})" 3502*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3503*7c356e86SAndroid Build Coastguard Worker blah $foo 3504*7c356e86SAndroid Build Coastguard Worker--- 3505*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-brace-pattern 3506*7c356e86SAndroid Build Coastguard Workerdescription: 3507*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside {} pattern are treated as quotes 3508*7c356e86SAndroid Build Coastguard Workerstdin: 3509*7c356e86SAndroid Build Coastguard Worker foo=1234 3510*7c356e86SAndroid Build Coastguard Worker echo ${foo%'2'*} "${foo%'2'*}" ${foo%2'*'} "${foo%2'*'}" 3511*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3512*7c356e86SAndroid Build Coastguard Worker 1 1 1234 1234 3513*7c356e86SAndroid Build Coastguard Worker--- 3514*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-heredoc-braces 3515*7c356e86SAndroid Build Coastguard Workerdescription: 3516*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside {} in heredoc are treated 3517*7c356e86SAndroid Build Coastguard Worker as normal char 3518*7c356e86SAndroid Build Coastguard Workerstdin: 3519*7c356e86SAndroid Build Coastguard Worker foo=1 3520*7c356e86SAndroid Build Coastguard Worker cat <<EOM 3521*7c356e86SAndroid Build Coastguard Worker ${foo:+'blah $foo'} 3522*7c356e86SAndroid Build Coastguard Worker EOM 3523*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3524*7c356e86SAndroid Build Coastguard Worker 'blah 1' 3525*7c356e86SAndroid Build Coastguard Worker--- 3526*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-nested-braces 3527*7c356e86SAndroid Build Coastguard Workerdescription: 3528*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside nested unquoted {} are 3529*7c356e86SAndroid Build Coastguard Worker treated as quotes 3530*7c356e86SAndroid Build Coastguard Workerstdin: 3531*7c356e86SAndroid Build Coastguard Worker foo=1 3532*7c356e86SAndroid Build Coastguard Worker echo ${foo:+${foo:+'blah $foo'}} 3533*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3534*7c356e86SAndroid Build Coastguard Worker blah $foo 3535*7c356e86SAndroid Build Coastguard Worker--- 3536*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-nested-quoted-braces 3537*7c356e86SAndroid Build Coastguard Workerdescription: 3538*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside nested quoted {} are treated 3539*7c356e86SAndroid Build Coastguard Worker as normal char 3540*7c356e86SAndroid Build Coastguard Workerstdin: 3541*7c356e86SAndroid Build Coastguard Worker foo=1 3542*7c356e86SAndroid Build Coastguard Worker echo "${foo:+${foo:+'blah $foo'}}" 3543*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3544*7c356e86SAndroid Build Coastguard Worker 'blah 1' 3545*7c356e86SAndroid Build Coastguard Worker--- 3546*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-nested-braces-nested 3547*7c356e86SAndroid Build Coastguard Workerdescription: 3548*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside nested unquoted {} are treated 3549*7c356e86SAndroid Build Coastguard Worker as quotes, even if that's inside a double-quoted command expansion 3550*7c356e86SAndroid Build Coastguard Workerstdin: 3551*7c356e86SAndroid Build Coastguard Worker foo=1 3552*7c356e86SAndroid Build Coastguard Worker echo "$( echo ${foo:+${foo:+'blah $foo'}})" 3553*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3554*7c356e86SAndroid Build Coastguard Worker blah $foo 3555*7c356e86SAndroid Build Coastguard Worker--- 3556*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-nested-brace-pattern 3557*7c356e86SAndroid Build Coastguard Workerdescription: 3558*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside nested {} pattern are treated as quotes 3559*7c356e86SAndroid Build Coastguard Workerstdin: 3560*7c356e86SAndroid Build Coastguard Worker foo=1234 3561*7c356e86SAndroid Build Coastguard Worker echo ${foo:+${foo%'2'*}} "${foo:+${foo%'2'*}}" ${foo:+${foo%2'*'}} "${foo:+${foo%2'*'}}" 3562*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3563*7c356e86SAndroid Build Coastguard Worker 1 1 1234 1234 3564*7c356e86SAndroid Build Coastguard Worker--- 3565*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-heredoc-nested-braces 3566*7c356e86SAndroid Build Coastguard Workerdescription: 3567*7c356e86SAndroid Build Coastguard Worker Check that single quotes inside nested {} in heredoc are treated 3568*7c356e86SAndroid Build Coastguard Worker as normal char 3569*7c356e86SAndroid Build Coastguard Workerstdin: 3570*7c356e86SAndroid Build Coastguard Worker foo=1 3571*7c356e86SAndroid Build Coastguard Worker cat <<EOM 3572*7c356e86SAndroid Build Coastguard Worker ${foo:+${foo:+'blah $foo'}} 3573*7c356e86SAndroid Build Coastguard Worker EOM 3574*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3575*7c356e86SAndroid Build Coastguard Worker 'blah 1' 3576*7c356e86SAndroid Build Coastguard Worker--- 3577*7c356e86SAndroid Build Coastguard Workername: single-quotes-in-heredoc-trim 3578*7c356e86SAndroid Build Coastguard Workerdescription: 3579*7c356e86SAndroid Build Coastguard Worker In some cases, single quotes inside {} in heredoc are not normal 3580*7c356e86SAndroid Build Coastguard Workerstdin: 3581*7c356e86SAndroid Build Coastguard Worker x=notOK 3582*7c356e86SAndroid Build Coastguard Worker cat <<EOF 3583*7c356e86SAndroid Build Coastguard Worker 1: ${x#not} ${x:+${x#not}} 3584*7c356e86SAndroid Build Coastguard Worker 2: ${x#\n\o\t} ${x:+${x#\n\o\t}} 3585*7c356e86SAndroid Build Coastguard Worker 3: ${x#"not"} ${x:+${x#"not"}} 3586*7c356e86SAndroid Build Coastguard Worker 4: ${x#'not'} ${x:+${x#'not'}} 3587*7c356e86SAndroid Build Coastguard Worker 5: ${x#$'not'} ${x:+${x#$'not'}} 3588*7c356e86SAndroid Build Coastguard Worker EOF 3589*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3590*7c356e86SAndroid Build Coastguard Worker 1: OK OK 3591*7c356e86SAndroid Build Coastguard Worker 2: OK OK 3592*7c356e86SAndroid Build Coastguard Worker 3: OK OK 3593*7c356e86SAndroid Build Coastguard Worker 4: OK OK 3594*7c356e86SAndroid Build Coastguard Worker 5: OK OK 3595*7c356e86SAndroid Build Coastguard Worker--- 3596*7c356e86SAndroid Build Coastguard Workername: history-basic 3597*7c356e86SAndroid Build Coastguard Workerdescription: 3598*7c356e86SAndroid Build Coastguard Worker See if we can test history at all 3599*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3600*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3601*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3602*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3603*7c356e86SAndroid Build Coastguard Worker PS1=X 3604*7c356e86SAndroid Build Coastguard Workerstdin: 3605*7c356e86SAndroid Build Coastguard Worker echo hi 3606*7c356e86SAndroid Build Coastguard Worker fc -l 3607*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3608*7c356e86SAndroid Build Coastguard Worker hi 3609*7c356e86SAndroid Build Coastguard Worker 1 echo hi 3610*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3611*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3612*7c356e86SAndroid Build Coastguard Worker--- 3613*7c356e86SAndroid Build Coastguard Workername: history-dups 3614*7c356e86SAndroid Build Coastguard Workerdescription: 3615*7c356e86SAndroid Build Coastguard Worker Verify duplicates and spaces are not entered 3616*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3617*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3618*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3619*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3620*7c356e86SAndroid Build Coastguard Worker PS1=X 3621*7c356e86SAndroid Build Coastguard Workerstdin: 3622*7c356e86SAndroid Build Coastguard Worker echo hi 3623*7c356e86SAndroid Build Coastguard Worker echo yo 3624*7c356e86SAndroid Build Coastguard Worker echo hi 3625*7c356e86SAndroid Build Coastguard Worker fc -l 3626*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3627*7c356e86SAndroid Build Coastguard Worker hi 3628*7c356e86SAndroid Build Coastguard Worker yo 3629*7c356e86SAndroid Build Coastguard Worker hi 3630*7c356e86SAndroid Build Coastguard Worker 1 echo hi 3631*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3632*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3633*7c356e86SAndroid Build Coastguard Worker--- 3634*7c356e86SAndroid Build Coastguard Workername: history-unlink 3635*7c356e86SAndroid Build Coastguard Workerdescription: 3636*7c356e86SAndroid Build Coastguard Worker Check if broken HISTFILEs do not cause trouble 3637*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3638*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3639*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=foo/hist.file! 3640*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3641*7c356e86SAndroid Build Coastguard Worker PS1=X 3642*7c356e86SAndroid Build Coastguard Workerfile-setup: dir 755 "foo" 3643*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "foo/hist.file" 3644*7c356e86SAndroid Build Coastguard Worker sometext 3645*7c356e86SAndroid Build Coastguard Workertime-limit: 5 3646*7c356e86SAndroid Build Coastguard Workerperl-setup: chmod(0555, "foo"); 3647*7c356e86SAndroid Build Coastguard Workerstdin: 3648*7c356e86SAndroid Build Coastguard Worker echo hi 3649*7c356e86SAndroid Build Coastguard Worker fc -l 3650*7c356e86SAndroid Build Coastguard Worker chmod 0755 foo 3651*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3652*7c356e86SAndroid Build Coastguard Worker hi 3653*7c356e86SAndroid Build Coastguard Worker 1 echo hi 3654*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3655*7c356e86SAndroid Build Coastguard Worker /(.*can't unlink HISTFILE.*\n)?X*$/ 3656*7c356e86SAndroid Build Coastguard Worker--- 3657*7c356e86SAndroid Build Coastguard Workername: history-multiline 3658*7c356e86SAndroid Build Coastguard Workerdescription: 3659*7c356e86SAndroid Build Coastguard Worker Check correct multiline history, Debian #783978 3660*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3661*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3662*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env! 3663*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3664*7c356e86SAndroid Build Coastguard Worker PS1=X 3665*7c356e86SAndroid Build Coastguard Worker PS2=Y 3666*7c356e86SAndroid Build Coastguard Workerstdin: 3667*7c356e86SAndroid Build Coastguard Worker for i in A B C 3668*7c356e86SAndroid Build Coastguard Worker do 3669*7c356e86SAndroid Build Coastguard Worker print $i 3670*7c356e86SAndroid Build Coastguard Worker print $i 3671*7c356e86SAndroid Build Coastguard Worker done 3672*7c356e86SAndroid Build Coastguard Worker fc -l 3673*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3674*7c356e86SAndroid Build Coastguard Worker A 3675*7c356e86SAndroid Build Coastguard Worker A 3676*7c356e86SAndroid Build Coastguard Worker B 3677*7c356e86SAndroid Build Coastguard Worker B 3678*7c356e86SAndroid Build Coastguard Worker C 3679*7c356e86SAndroid Build Coastguard Worker C 3680*7c356e86SAndroid Build Coastguard Worker 1 for i in A B C 3681*7c356e86SAndroid Build Coastguard Worker do 3682*7c356e86SAndroid Build Coastguard Worker print $i 3683*7c356e86SAndroid Build Coastguard Worker print $i 3684*7c356e86SAndroid Build Coastguard Worker done 3685*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3686*7c356e86SAndroid Build Coastguard Worker /^XYYYYXX$/ 3687*7c356e86SAndroid Build Coastguard Worker--- 3688*7c356e86SAndroid Build Coastguard Workername: history-e-minus-1 3689*7c356e86SAndroid Build Coastguard Workerdescription: 3690*7c356e86SAndroid Build Coastguard Worker Check if more recent command is executed 3691*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3692*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3693*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3694*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3695*7c356e86SAndroid Build Coastguard Worker PS1=X 3696*7c356e86SAndroid Build Coastguard Workerstdin: 3697*7c356e86SAndroid Build Coastguard Worker echo hi 3698*7c356e86SAndroid Build Coastguard Worker echo there 3699*7c356e86SAndroid Build Coastguard Worker fc -e - 3700*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3701*7c356e86SAndroid Build Coastguard Worker hi 3702*7c356e86SAndroid Build Coastguard Worker there 3703*7c356e86SAndroid Build Coastguard Worker there 3704*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3705*7c356e86SAndroid Build Coastguard Worker /^X*echo there\nX*$/ 3706*7c356e86SAndroid Build Coastguard Worker--- 3707*7c356e86SAndroid Build Coastguard Workername: history-e-minus-2 3708*7c356e86SAndroid Build Coastguard Workerdescription: 3709*7c356e86SAndroid Build Coastguard Worker Check that repeated command is printed before command 3710*7c356e86SAndroid Build Coastguard Worker is re-executed. 3711*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3712*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3713*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3714*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3715*7c356e86SAndroid Build Coastguard Worker PS1=X 3716*7c356e86SAndroid Build Coastguard Workerstdin: 3717*7c356e86SAndroid Build Coastguard Worker exec 2>&1 3718*7c356e86SAndroid Build Coastguard Worker echo hi 3719*7c356e86SAndroid Build Coastguard Worker echo there 3720*7c356e86SAndroid Build Coastguard Worker fc -e - 3721*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern: 3722*7c356e86SAndroid Build Coastguard Worker /X*hi\nX*there\nX*echo there\nthere\nX*/ 3723*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3724*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3725*7c356e86SAndroid Build Coastguard Worker--- 3726*7c356e86SAndroid Build Coastguard Workername: history-e-minus-3 3727*7c356e86SAndroid Build Coastguard Workerdescription: 3728*7c356e86SAndroid Build Coastguard Worker fc -e - fails when there is no history 3729*7c356e86SAndroid Build Coastguard Worker (ksh93 has a bug that causes this to fail) 3730*7c356e86SAndroid Build Coastguard Worker (ksh88 loops on this) 3731*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3732*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3733*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3734*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3735*7c356e86SAndroid Build Coastguard Worker PS1=X 3736*7c356e86SAndroid Build Coastguard Workerstdin: 3737*7c356e86SAndroid Build Coastguard Worker fc -e - 3738*7c356e86SAndroid Build Coastguard Worker echo ok 3739*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3740*7c356e86SAndroid Build Coastguard Worker ok 3741*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3742*7c356e86SAndroid Build Coastguard Worker /^X*.*:.*history.*\nX*$/ 3743*7c356e86SAndroid Build Coastguard Worker--- 3744*7c356e86SAndroid Build Coastguard Workername: history-e-minus-4 3745*7c356e86SAndroid Build Coastguard Workerdescription: 3746*7c356e86SAndroid Build Coastguard Worker Check if "fc -e -" command output goes to stdout. 3747*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3748*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3749*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3750*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3751*7c356e86SAndroid Build Coastguard Worker PS1=X 3752*7c356e86SAndroid Build Coastguard Workerstdin: 3753*7c356e86SAndroid Build Coastguard Worker echo abc 3754*7c356e86SAndroid Build Coastguard Worker fc -e - | (read x; echo "A $x") 3755*7c356e86SAndroid Build Coastguard Worker echo ok 3756*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3757*7c356e86SAndroid Build Coastguard Worker abc 3758*7c356e86SAndroid Build Coastguard Worker A abc 3759*7c356e86SAndroid Build Coastguard Worker ok 3760*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3761*7c356e86SAndroid Build Coastguard Worker /^X*echo abc\nX*/ 3762*7c356e86SAndroid Build Coastguard Worker--- 3763*7c356e86SAndroid Build Coastguard Workername: history-e-minus-5 3764*7c356e86SAndroid Build Coastguard Workerdescription: 3765*7c356e86SAndroid Build Coastguard Worker fc is replaced in history by new command. 3766*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3767*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3768*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3769*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3770*7c356e86SAndroid Build Coastguard Worker PS1=X 3771*7c356e86SAndroid Build Coastguard Workerstdin: 3772*7c356e86SAndroid Build Coastguard Worker echo abc def 3773*7c356e86SAndroid Build Coastguard Worker echo ghi jkl 3774*7c356e86SAndroid Build Coastguard Worker : 3775*7c356e86SAndroid Build Coastguard Worker fc -e - echo 3776*7c356e86SAndroid Build Coastguard Worker fc -l 2 5 3777*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3778*7c356e86SAndroid Build Coastguard Worker abc def 3779*7c356e86SAndroid Build Coastguard Worker ghi jkl 3780*7c356e86SAndroid Build Coastguard Worker ghi jkl 3781*7c356e86SAndroid Build Coastguard Worker 2 echo ghi jkl 3782*7c356e86SAndroid Build Coastguard Worker 3 : 3783*7c356e86SAndroid Build Coastguard Worker 4 echo ghi jkl 3784*7c356e86SAndroid Build Coastguard Worker 5 fc -l 2 5 3785*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3786*7c356e86SAndroid Build Coastguard Worker /^X*echo ghi jkl\nX*$/ 3787*7c356e86SAndroid Build Coastguard Worker--- 3788*7c356e86SAndroid Build Coastguard Workername: history-list-1 3789*7c356e86SAndroid Build Coastguard Workerdescription: 3790*7c356e86SAndroid Build Coastguard Worker List lists correct range 3791*7c356e86SAndroid Build Coastguard Worker (ksh88 fails 'cause it lists the fc command) 3792*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3793*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3794*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3795*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3796*7c356e86SAndroid Build Coastguard Worker PS1=X 3797*7c356e86SAndroid Build Coastguard Workerstdin: 3798*7c356e86SAndroid Build Coastguard Worker echo line 1 3799*7c356e86SAndroid Build Coastguard Worker echo line 2 3800*7c356e86SAndroid Build Coastguard Worker echo line 3 3801*7c356e86SAndroid Build Coastguard Worker fc -l -- -2 3802*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3803*7c356e86SAndroid Build Coastguard Worker line 1 3804*7c356e86SAndroid Build Coastguard Worker line 2 3805*7c356e86SAndroid Build Coastguard Worker line 3 3806*7c356e86SAndroid Build Coastguard Worker 2 echo line 2 3807*7c356e86SAndroid Build Coastguard Worker 3 echo line 3 3808*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3809*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3810*7c356e86SAndroid Build Coastguard Worker--- 3811*7c356e86SAndroid Build Coastguard Workername: history-list-2 3812*7c356e86SAndroid Build Coastguard Workerdescription: 3813*7c356e86SAndroid Build Coastguard Worker Lists oldest history if given pre-historic number 3814*7c356e86SAndroid Build Coastguard Worker (ksh93 has a bug that causes this to fail) 3815*7c356e86SAndroid Build Coastguard Worker (ksh88 fails 'cause it lists the fc command) 3816*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3817*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3818*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3819*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3820*7c356e86SAndroid Build Coastguard Worker PS1=X 3821*7c356e86SAndroid Build Coastguard Workerstdin: 3822*7c356e86SAndroid Build Coastguard Worker echo line 1 3823*7c356e86SAndroid Build Coastguard Worker echo line 2 3824*7c356e86SAndroid Build Coastguard Worker echo line 3 3825*7c356e86SAndroid Build Coastguard Worker fc -l -- -40 3826*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3827*7c356e86SAndroid Build Coastguard Worker line 1 3828*7c356e86SAndroid Build Coastguard Worker line 2 3829*7c356e86SAndroid Build Coastguard Worker line 3 3830*7c356e86SAndroid Build Coastguard Worker 1 echo line 1 3831*7c356e86SAndroid Build Coastguard Worker 2 echo line 2 3832*7c356e86SAndroid Build Coastguard Worker 3 echo line 3 3833*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3834*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3835*7c356e86SAndroid Build Coastguard Worker--- 3836*7c356e86SAndroid Build Coastguard Workername: history-list-3 3837*7c356e86SAndroid Build Coastguard Workerdescription: 3838*7c356e86SAndroid Build Coastguard Worker Can give number 'options' to fc 3839*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3840*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3841*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3842*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3843*7c356e86SAndroid Build Coastguard Worker PS1=X 3844*7c356e86SAndroid Build Coastguard Workerstdin: 3845*7c356e86SAndroid Build Coastguard Worker echo line 1 3846*7c356e86SAndroid Build Coastguard Worker echo line 2 3847*7c356e86SAndroid Build Coastguard Worker echo line 3 3848*7c356e86SAndroid Build Coastguard Worker echo line 4 3849*7c356e86SAndroid Build Coastguard Worker fc -l -3 -2 3850*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3851*7c356e86SAndroid Build Coastguard Worker line 1 3852*7c356e86SAndroid Build Coastguard Worker line 2 3853*7c356e86SAndroid Build Coastguard Worker line 3 3854*7c356e86SAndroid Build Coastguard Worker line 4 3855*7c356e86SAndroid Build Coastguard Worker 2 echo line 2 3856*7c356e86SAndroid Build Coastguard Worker 3 echo line 3 3857*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3858*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3859*7c356e86SAndroid Build Coastguard Worker--- 3860*7c356e86SAndroid Build Coastguard Workername: history-list-4 3861*7c356e86SAndroid Build Coastguard Workerdescription: 3862*7c356e86SAndroid Build Coastguard Worker -1 refers to previous command 3863*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3864*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3865*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3866*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3867*7c356e86SAndroid Build Coastguard Worker PS1=X 3868*7c356e86SAndroid Build Coastguard Workerstdin: 3869*7c356e86SAndroid Build Coastguard Worker echo line 1 3870*7c356e86SAndroid Build Coastguard Worker echo line 2 3871*7c356e86SAndroid Build Coastguard Worker echo line 3 3872*7c356e86SAndroid Build Coastguard Worker echo line 4 3873*7c356e86SAndroid Build Coastguard Worker fc -l -1 -1 3874*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3875*7c356e86SAndroid Build Coastguard Worker line 1 3876*7c356e86SAndroid Build Coastguard Worker line 2 3877*7c356e86SAndroid Build Coastguard Worker line 3 3878*7c356e86SAndroid Build Coastguard Worker line 4 3879*7c356e86SAndroid Build Coastguard Worker 4 echo line 4 3880*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3881*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3882*7c356e86SAndroid Build Coastguard Worker--- 3883*7c356e86SAndroid Build Coastguard Workername: history-list-5 3884*7c356e86SAndroid Build Coastguard Workerdescription: 3885*7c356e86SAndroid Build Coastguard Worker List command stays in history 3886*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3887*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3888*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3889*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3890*7c356e86SAndroid Build Coastguard Worker PS1=X 3891*7c356e86SAndroid Build Coastguard Workerstdin: 3892*7c356e86SAndroid Build Coastguard Worker echo line 1 3893*7c356e86SAndroid Build Coastguard Worker echo line 2 3894*7c356e86SAndroid Build Coastguard Worker echo line 3 3895*7c356e86SAndroid Build Coastguard Worker echo line 4 3896*7c356e86SAndroid Build Coastguard Worker fc -l -1 -1 3897*7c356e86SAndroid Build Coastguard Worker fc -l -2 -1 3898*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3899*7c356e86SAndroid Build Coastguard Worker line 1 3900*7c356e86SAndroid Build Coastguard Worker line 2 3901*7c356e86SAndroid Build Coastguard Worker line 3 3902*7c356e86SAndroid Build Coastguard Worker line 4 3903*7c356e86SAndroid Build Coastguard Worker 4 echo line 4 3904*7c356e86SAndroid Build Coastguard Worker 4 echo line 4 3905*7c356e86SAndroid Build Coastguard Worker 5 fc -l -1 -1 3906*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3907*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3908*7c356e86SAndroid Build Coastguard Worker--- 3909*7c356e86SAndroid Build Coastguard Workername: history-list-6 3910*7c356e86SAndroid Build Coastguard Workerdescription: 3911*7c356e86SAndroid Build Coastguard Worker HISTSIZE limits about of history kept. 3912*7c356e86SAndroid Build Coastguard Worker (ksh88 fails 'cause it lists the fc command) 3913*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3914*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3915*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!HISTSIZE=3! 3916*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3917*7c356e86SAndroid Build Coastguard Worker PS1=X 3918*7c356e86SAndroid Build Coastguard Workerstdin: 3919*7c356e86SAndroid Build Coastguard Worker echo line 1 3920*7c356e86SAndroid Build Coastguard Worker echo line 2 3921*7c356e86SAndroid Build Coastguard Worker echo line 3 3922*7c356e86SAndroid Build Coastguard Worker echo line 4 3923*7c356e86SAndroid Build Coastguard Worker echo line 5 3924*7c356e86SAndroid Build Coastguard Worker fc -l 3925*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3926*7c356e86SAndroid Build Coastguard Worker line 1 3927*7c356e86SAndroid Build Coastguard Worker line 2 3928*7c356e86SAndroid Build Coastguard Worker line 3 3929*7c356e86SAndroid Build Coastguard Worker line 4 3930*7c356e86SAndroid Build Coastguard Worker line 5 3931*7c356e86SAndroid Build Coastguard Worker 4 echo line 4 3932*7c356e86SAndroid Build Coastguard Worker 5 echo line 5 3933*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3934*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3935*7c356e86SAndroid Build Coastguard Worker--- 3936*7c356e86SAndroid Build Coastguard Workername: history-list-7 3937*7c356e86SAndroid Build Coastguard Workerdescription: 3938*7c356e86SAndroid Build Coastguard Worker fc allows too old/new errors in range specification 3939*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3940*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3941*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file!HISTSIZE=3! 3942*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3943*7c356e86SAndroid Build Coastguard Worker PS1=X 3944*7c356e86SAndroid Build Coastguard Workerstdin: 3945*7c356e86SAndroid Build Coastguard Worker echo line 1 3946*7c356e86SAndroid Build Coastguard Worker echo line 2 3947*7c356e86SAndroid Build Coastguard Worker echo line 3 3948*7c356e86SAndroid Build Coastguard Worker echo line 4 3949*7c356e86SAndroid Build Coastguard Worker echo line 5 3950*7c356e86SAndroid Build Coastguard Worker fc -l 1 30 3951*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3952*7c356e86SAndroid Build Coastguard Worker line 1 3953*7c356e86SAndroid Build Coastguard Worker line 2 3954*7c356e86SAndroid Build Coastguard Worker line 3 3955*7c356e86SAndroid Build Coastguard Worker line 4 3956*7c356e86SAndroid Build Coastguard Worker line 5 3957*7c356e86SAndroid Build Coastguard Worker 4 echo line 4 3958*7c356e86SAndroid Build Coastguard Worker 5 echo line 5 3959*7c356e86SAndroid Build Coastguard Worker 6 fc -l 1 30 3960*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3961*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3962*7c356e86SAndroid Build Coastguard Worker--- 3963*7c356e86SAndroid Build Coastguard Workername: history-list-r-1 3964*7c356e86SAndroid Build Coastguard Workerdescription: 3965*7c356e86SAndroid Build Coastguard Worker test -r flag in history 3966*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3967*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3968*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3969*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3970*7c356e86SAndroid Build Coastguard Worker PS1=X 3971*7c356e86SAndroid Build Coastguard Workerstdin: 3972*7c356e86SAndroid Build Coastguard Worker echo line 1 3973*7c356e86SAndroid Build Coastguard Worker echo line 2 3974*7c356e86SAndroid Build Coastguard Worker echo line 3 3975*7c356e86SAndroid Build Coastguard Worker echo line 4 3976*7c356e86SAndroid Build Coastguard Worker echo line 5 3977*7c356e86SAndroid Build Coastguard Worker fc -l -r 2 4 3978*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 3979*7c356e86SAndroid Build Coastguard Worker line 1 3980*7c356e86SAndroid Build Coastguard Worker line 2 3981*7c356e86SAndroid Build Coastguard Worker line 3 3982*7c356e86SAndroid Build Coastguard Worker line 4 3983*7c356e86SAndroid Build Coastguard Worker line 5 3984*7c356e86SAndroid Build Coastguard Worker 4 echo line 4 3985*7c356e86SAndroid Build Coastguard Worker 3 echo line 3 3986*7c356e86SAndroid Build Coastguard Worker 2 echo line 2 3987*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 3988*7c356e86SAndroid Build Coastguard Worker /^X*$/ 3989*7c356e86SAndroid Build Coastguard Worker--- 3990*7c356e86SAndroid Build Coastguard Workername: history-list-r-2 3991*7c356e86SAndroid Build Coastguard Workerdescription: 3992*7c356e86SAndroid Build Coastguard Worker If first is newer than last, -r is implied. 3993*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 3994*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 3995*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 3996*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 3997*7c356e86SAndroid Build Coastguard Worker PS1=X 3998*7c356e86SAndroid Build Coastguard Workerstdin: 3999*7c356e86SAndroid Build Coastguard Worker echo line 1 4000*7c356e86SAndroid Build Coastguard Worker echo line 2 4001*7c356e86SAndroid Build Coastguard Worker echo line 3 4002*7c356e86SAndroid Build Coastguard Worker echo line 4 4003*7c356e86SAndroid Build Coastguard Worker echo line 5 4004*7c356e86SAndroid Build Coastguard Worker fc -l 4 2 4005*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4006*7c356e86SAndroid Build Coastguard Worker line 1 4007*7c356e86SAndroid Build Coastguard Worker line 2 4008*7c356e86SAndroid Build Coastguard Worker line 3 4009*7c356e86SAndroid Build Coastguard Worker line 4 4010*7c356e86SAndroid Build Coastguard Worker line 5 4011*7c356e86SAndroid Build Coastguard Worker 4 echo line 4 4012*7c356e86SAndroid Build Coastguard Worker 3 echo line 3 4013*7c356e86SAndroid Build Coastguard Worker 2 echo line 2 4014*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4015*7c356e86SAndroid Build Coastguard Worker /^X*$/ 4016*7c356e86SAndroid Build Coastguard Worker--- 4017*7c356e86SAndroid Build Coastguard Workername: history-list-r-3 4018*7c356e86SAndroid Build Coastguard Workerdescription: 4019*7c356e86SAndroid Build Coastguard Worker If first is newer than last, -r is cancelled. 4020*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4021*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4022*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4023*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4024*7c356e86SAndroid Build Coastguard Worker PS1=X 4025*7c356e86SAndroid Build Coastguard Workerstdin: 4026*7c356e86SAndroid Build Coastguard Worker echo line 1 4027*7c356e86SAndroid Build Coastguard Worker echo line 2 4028*7c356e86SAndroid Build Coastguard Worker echo line 3 4029*7c356e86SAndroid Build Coastguard Worker echo line 4 4030*7c356e86SAndroid Build Coastguard Worker echo line 5 4031*7c356e86SAndroid Build Coastguard Worker fc -l -r 4 2 4032*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4033*7c356e86SAndroid Build Coastguard Worker line 1 4034*7c356e86SAndroid Build Coastguard Worker line 2 4035*7c356e86SAndroid Build Coastguard Worker line 3 4036*7c356e86SAndroid Build Coastguard Worker line 4 4037*7c356e86SAndroid Build Coastguard Worker line 5 4038*7c356e86SAndroid Build Coastguard Worker 2 echo line 2 4039*7c356e86SAndroid Build Coastguard Worker 3 echo line 3 4040*7c356e86SAndroid Build Coastguard Worker 4 echo line 4 4041*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4042*7c356e86SAndroid Build Coastguard Worker /^X*$/ 4043*7c356e86SAndroid Build Coastguard Worker--- 4044*7c356e86SAndroid Build Coastguard Workername: history-subst-1 4045*7c356e86SAndroid Build Coastguard Workerdescription: 4046*7c356e86SAndroid Build Coastguard Worker Basic substitution 4047*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4048*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4049*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4050*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4051*7c356e86SAndroid Build Coastguard Worker PS1=X 4052*7c356e86SAndroid Build Coastguard Workerstdin: 4053*7c356e86SAndroid Build Coastguard Worker echo abc def 4054*7c356e86SAndroid Build Coastguard Worker echo ghi jkl 4055*7c356e86SAndroid Build Coastguard Worker fc -e - abc=AB 'echo a' 4056*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4057*7c356e86SAndroid Build Coastguard Worker abc def 4058*7c356e86SAndroid Build Coastguard Worker ghi jkl 4059*7c356e86SAndroid Build Coastguard Worker AB def 4060*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4061*7c356e86SAndroid Build Coastguard Worker /^X*echo AB def\nX*$/ 4062*7c356e86SAndroid Build Coastguard Worker--- 4063*7c356e86SAndroid Build Coastguard Workername: history-subst-2 4064*7c356e86SAndroid Build Coastguard Workerdescription: 4065*7c356e86SAndroid Build Coastguard Worker Does subst find previous command? 4066*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4067*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4068*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4069*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4070*7c356e86SAndroid Build Coastguard Worker PS1=X 4071*7c356e86SAndroid Build Coastguard Workerstdin: 4072*7c356e86SAndroid Build Coastguard Worker echo abc def 4073*7c356e86SAndroid Build Coastguard Worker echo ghi jkl 4074*7c356e86SAndroid Build Coastguard Worker fc -e - jkl=XYZQRT 'echo g' 4075*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4076*7c356e86SAndroid Build Coastguard Worker abc def 4077*7c356e86SAndroid Build Coastguard Worker ghi jkl 4078*7c356e86SAndroid Build Coastguard Worker ghi XYZQRT 4079*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4080*7c356e86SAndroid Build Coastguard Worker /^X*echo ghi XYZQRT\nX*$/ 4081*7c356e86SAndroid Build Coastguard Worker--- 4082*7c356e86SAndroid Build Coastguard Workername: history-subst-3 4083*7c356e86SAndroid Build Coastguard Workerdescription: 4084*7c356e86SAndroid Build Coastguard Worker Does subst find previous command when no arguments given 4085*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4086*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4087*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4088*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4089*7c356e86SAndroid Build Coastguard Worker PS1=X 4090*7c356e86SAndroid Build Coastguard Workerstdin: 4091*7c356e86SAndroid Build Coastguard Worker echo abc def 4092*7c356e86SAndroid Build Coastguard Worker echo ghi jkl 4093*7c356e86SAndroid Build Coastguard Worker fc -e - jkl=XYZQRT 4094*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4095*7c356e86SAndroid Build Coastguard Worker abc def 4096*7c356e86SAndroid Build Coastguard Worker ghi jkl 4097*7c356e86SAndroid Build Coastguard Worker ghi XYZQRT 4098*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4099*7c356e86SAndroid Build Coastguard Worker /^X*echo ghi XYZQRT\nX*$/ 4100*7c356e86SAndroid Build Coastguard Worker--- 4101*7c356e86SAndroid Build Coastguard Workername: history-subst-4 4102*7c356e86SAndroid Build Coastguard Workerdescription: 4103*7c356e86SAndroid Build Coastguard Worker Global substitutions work 4104*7c356e86SAndroid Build Coastguard Worker (ksh88 and ksh93 do not have -g option) 4105*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4106*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4107*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4108*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4109*7c356e86SAndroid Build Coastguard Worker PS1=X 4110*7c356e86SAndroid Build Coastguard Workerstdin: 4111*7c356e86SAndroid Build Coastguard Worker echo abc def asjj sadjhasdjh asdjhasd 4112*7c356e86SAndroid Build Coastguard Worker fc -e - -g a=FooBAR 4113*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4114*7c356e86SAndroid Build Coastguard Worker abc def asjj sadjhasdjh asdjhasd 4115*7c356e86SAndroid Build Coastguard Worker FooBARbc def FooBARsjj sFooBARdjhFooBARsdjh FooBARsdjhFooBARsd 4116*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4117*7c356e86SAndroid Build Coastguard Worker /^X*echo FooBARbc def FooBARsjj sFooBARdjhFooBARsdjh FooBARsdjhFooBARsd\nX*$/ 4118*7c356e86SAndroid Build Coastguard Worker--- 4119*7c356e86SAndroid Build Coastguard Workername: history-subst-5 4120*7c356e86SAndroid Build Coastguard Workerdescription: 4121*7c356e86SAndroid Build Coastguard Worker Make sure searches don't find current (fc) command 4122*7c356e86SAndroid Build Coastguard Worker (ksh88/ksh93 don't have the ? prefix thing so they fail this test) 4123*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4124*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4125*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4126*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4127*7c356e86SAndroid Build Coastguard Worker PS1=X 4128*7c356e86SAndroid Build Coastguard Workerstdin: 4129*7c356e86SAndroid Build Coastguard Worker echo abc def 4130*7c356e86SAndroid Build Coastguard Worker echo ghi jkl 4131*7c356e86SAndroid Build Coastguard Worker fc -e - abc=AB \?abc 4132*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4133*7c356e86SAndroid Build Coastguard Worker abc def 4134*7c356e86SAndroid Build Coastguard Worker ghi jkl 4135*7c356e86SAndroid Build Coastguard Worker AB def 4136*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4137*7c356e86SAndroid Build Coastguard Worker /^X*echo AB def\nX*$/ 4138*7c356e86SAndroid Build Coastguard Worker--- 4139*7c356e86SAndroid Build Coastguard Workername: history-ed-1-old 4140*7c356e86SAndroid Build Coastguard Workerdescription: 4141*7c356e86SAndroid Build Coastguard Worker Basic (ed) editing works (assumes you have generic ed editor 4142*7c356e86SAndroid Build Coastguard Worker that prints no prompts). This is for oldish ed(1) which write 4143*7c356e86SAndroid Build Coastguard Worker the character count to stdout. 4144*7c356e86SAndroid Build Coastguard Workercategory: stdout-ed 4145*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4146*7c356e86SAndroid Build Coastguard Workerneed-pass: no 4147*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4148*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4149*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4150*7c356e86SAndroid Build Coastguard Worker PS1=X 4151*7c356e86SAndroid Build Coastguard Workerstdin: 4152*7c356e86SAndroid Build Coastguard Worker echo abc def 4153*7c356e86SAndroid Build Coastguard Worker fc echo 4154*7c356e86SAndroid Build Coastguard Worker s/abc/FOOBAR/ 4155*7c356e86SAndroid Build Coastguard Worker w 4156*7c356e86SAndroid Build Coastguard Worker q 4157*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4158*7c356e86SAndroid Build Coastguard Worker abc def 4159*7c356e86SAndroid Build Coastguard Worker 13 4160*7c356e86SAndroid Build Coastguard Worker 16 4161*7c356e86SAndroid Build Coastguard Worker FOOBAR def 4162*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4163*7c356e86SAndroid Build Coastguard Worker /^X*echo FOOBAR def\nX*$/ 4164*7c356e86SAndroid Build Coastguard Worker--- 4165*7c356e86SAndroid Build Coastguard Workername: history-ed-2-old 4166*7c356e86SAndroid Build Coastguard Workerdescription: 4167*7c356e86SAndroid Build Coastguard Worker Correct command is edited when number given 4168*7c356e86SAndroid Build Coastguard Workercategory: stdout-ed 4169*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4170*7c356e86SAndroid Build Coastguard Workerneed-pass: no 4171*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4172*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4173*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4174*7c356e86SAndroid Build Coastguard Worker PS1=X 4175*7c356e86SAndroid Build Coastguard Workerstdin: 4176*7c356e86SAndroid Build Coastguard Worker echo line 1 4177*7c356e86SAndroid Build Coastguard Worker echo line 2 is here 4178*7c356e86SAndroid Build Coastguard Worker echo line 3 4179*7c356e86SAndroid Build Coastguard Worker echo line 4 4180*7c356e86SAndroid Build Coastguard Worker fc 2 4181*7c356e86SAndroid Build Coastguard Worker s/is here/is changed/ 4182*7c356e86SAndroid Build Coastguard Worker w 4183*7c356e86SAndroid Build Coastguard Worker q 4184*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4185*7c356e86SAndroid Build Coastguard Worker line 1 4186*7c356e86SAndroid Build Coastguard Worker line 2 is here 4187*7c356e86SAndroid Build Coastguard Worker line 3 4188*7c356e86SAndroid Build Coastguard Worker line 4 4189*7c356e86SAndroid Build Coastguard Worker 20 4190*7c356e86SAndroid Build Coastguard Worker 23 4191*7c356e86SAndroid Build Coastguard Worker line 2 is changed 4192*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4193*7c356e86SAndroid Build Coastguard Worker /^X*echo line 2 is changed\nX*$/ 4194*7c356e86SAndroid Build Coastguard Worker--- 4195*7c356e86SAndroid Build Coastguard Workername: history-ed-3-old 4196*7c356e86SAndroid Build Coastguard Workerdescription: 4197*7c356e86SAndroid Build Coastguard Worker Newly created multi line commands show up as single command 4198*7c356e86SAndroid Build Coastguard Worker in history. 4199*7c356e86SAndroid Build Coastguard Worker (ksh88 fails 'cause it lists the fc command) 4200*7c356e86SAndroid Build Coastguard Workercategory: stdout-ed 4201*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4202*7c356e86SAndroid Build Coastguard Workerneed-pass: no 4203*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4204*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4205*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4206*7c356e86SAndroid Build Coastguard Worker PS1=X 4207*7c356e86SAndroid Build Coastguard Workerstdin: 4208*7c356e86SAndroid Build Coastguard Worker echo abc def 4209*7c356e86SAndroid Build Coastguard Worker fc echo 4210*7c356e86SAndroid Build Coastguard Worker s/abc/FOOBAR/ 4211*7c356e86SAndroid Build Coastguard Worker $a 4212*7c356e86SAndroid Build Coastguard Worker echo a new line 4213*7c356e86SAndroid Build Coastguard Worker . 4214*7c356e86SAndroid Build Coastguard Worker w 4215*7c356e86SAndroid Build Coastguard Worker q 4216*7c356e86SAndroid Build Coastguard Worker fc -l 4217*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4218*7c356e86SAndroid Build Coastguard Worker abc def 4219*7c356e86SAndroid Build Coastguard Worker 13 4220*7c356e86SAndroid Build Coastguard Worker 32 4221*7c356e86SAndroid Build Coastguard Worker FOOBAR def 4222*7c356e86SAndroid Build Coastguard Worker a new line 4223*7c356e86SAndroid Build Coastguard Worker 1 echo abc def 4224*7c356e86SAndroid Build Coastguard Worker 2 echo FOOBAR def 4225*7c356e86SAndroid Build Coastguard Worker echo a new line 4226*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4227*7c356e86SAndroid Build Coastguard Worker /^X*echo FOOBAR def\necho a new line\nX*$/ 4228*7c356e86SAndroid Build Coastguard Worker--- 4229*7c356e86SAndroid Build Coastguard Workername: history-ed-1 4230*7c356e86SAndroid Build Coastguard Workerdescription: 4231*7c356e86SAndroid Build Coastguard Worker Basic (ed) editing works (assumes you have generic ed editor 4232*7c356e86SAndroid Build Coastguard Worker that prints no prompts). This is for newish ed(1) and stderr. 4233*7c356e86SAndroid Build Coastguard Workercategory: !no-stderr-ed 4234*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4235*7c356e86SAndroid Build Coastguard Workerneed-pass: no 4236*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4237*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4238*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4239*7c356e86SAndroid Build Coastguard Worker PS1=X 4240*7c356e86SAndroid Build Coastguard Workerstdin: 4241*7c356e86SAndroid Build Coastguard Worker echo abc def 4242*7c356e86SAndroid Build Coastguard Worker fc echo 4243*7c356e86SAndroid Build Coastguard Worker s/abc/FOOBAR/ 4244*7c356e86SAndroid Build Coastguard Worker w 4245*7c356e86SAndroid Build Coastguard Worker q 4246*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4247*7c356e86SAndroid Build Coastguard Worker abc def 4248*7c356e86SAndroid Build Coastguard Worker FOOBAR def 4249*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4250*7c356e86SAndroid Build Coastguard Worker /^X*13\n16\necho FOOBAR def\nX*$/ 4251*7c356e86SAndroid Build Coastguard Worker--- 4252*7c356e86SAndroid Build Coastguard Workername: history-ed-2 4253*7c356e86SAndroid Build Coastguard Workerdescription: 4254*7c356e86SAndroid Build Coastguard Worker Correct command is edited when number given 4255*7c356e86SAndroid Build Coastguard Workercategory: !no-stderr-ed 4256*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4257*7c356e86SAndroid Build Coastguard Workerneed-pass: no 4258*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4259*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4260*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4261*7c356e86SAndroid Build Coastguard Worker PS1=X 4262*7c356e86SAndroid Build Coastguard Workerstdin: 4263*7c356e86SAndroid Build Coastguard Worker echo line 1 4264*7c356e86SAndroid Build Coastguard Worker echo line 2 is here 4265*7c356e86SAndroid Build Coastguard Worker echo line 3 4266*7c356e86SAndroid Build Coastguard Worker echo line 4 4267*7c356e86SAndroid Build Coastguard Worker fc 2 4268*7c356e86SAndroid Build Coastguard Worker s/is here/is changed/ 4269*7c356e86SAndroid Build Coastguard Worker w 4270*7c356e86SAndroid Build Coastguard Worker q 4271*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4272*7c356e86SAndroid Build Coastguard Worker line 1 4273*7c356e86SAndroid Build Coastguard Worker line 2 is here 4274*7c356e86SAndroid Build Coastguard Worker line 3 4275*7c356e86SAndroid Build Coastguard Worker line 4 4276*7c356e86SAndroid Build Coastguard Worker line 2 is changed 4277*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4278*7c356e86SAndroid Build Coastguard Worker /^X*20\n23\necho line 2 is changed\nX*$/ 4279*7c356e86SAndroid Build Coastguard Worker--- 4280*7c356e86SAndroid Build Coastguard Workername: history-ed-3 4281*7c356e86SAndroid Build Coastguard Workerdescription: 4282*7c356e86SAndroid Build Coastguard Worker Newly created multi line commands show up as single command 4283*7c356e86SAndroid Build Coastguard Worker in history. 4284*7c356e86SAndroid Build Coastguard Workercategory: !no-stderr-ed 4285*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 4286*7c356e86SAndroid Build Coastguard Workerneed-pass: no 4287*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 4288*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 4289*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 4290*7c356e86SAndroid Build Coastguard Worker PS1=X 4291*7c356e86SAndroid Build Coastguard Workerstdin: 4292*7c356e86SAndroid Build Coastguard Worker echo abc def 4293*7c356e86SAndroid Build Coastguard Worker fc echo 4294*7c356e86SAndroid Build Coastguard Worker s/abc/FOOBAR/ 4295*7c356e86SAndroid Build Coastguard Worker $a 4296*7c356e86SAndroid Build Coastguard Worker echo a new line 4297*7c356e86SAndroid Build Coastguard Worker . 4298*7c356e86SAndroid Build Coastguard Worker w 4299*7c356e86SAndroid Build Coastguard Worker q 4300*7c356e86SAndroid Build Coastguard Worker fc -l 4301*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4302*7c356e86SAndroid Build Coastguard Worker abc def 4303*7c356e86SAndroid Build Coastguard Worker FOOBAR def 4304*7c356e86SAndroid Build Coastguard Worker a new line 4305*7c356e86SAndroid Build Coastguard Worker 1 echo abc def 4306*7c356e86SAndroid Build Coastguard Worker 2 echo FOOBAR def 4307*7c356e86SAndroid Build Coastguard Worker echo a new line 4308*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4309*7c356e86SAndroid Build Coastguard Worker /^X*13\n32\necho FOOBAR def\necho a new line\nX*$/ 4310*7c356e86SAndroid Build Coastguard Worker--- 4311*7c356e86SAndroid Build Coastguard Workername: IFS-space-1 4312*7c356e86SAndroid Build Coastguard Workerdescription: 4313*7c356e86SAndroid Build Coastguard Worker Simple test, default IFS 4314*7c356e86SAndroid Build Coastguard Workerstdin: 4315*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4316*7c356e86SAndroid Build Coastguard Worker set -- A B C 4317*7c356e86SAndroid Build Coastguard Worker showargs 1 $* 4318*7c356e86SAndroid Build Coastguard Worker showargs 2 "$*" 4319*7c356e86SAndroid Build Coastguard Worker showargs 3 $@ 4320*7c356e86SAndroid Build Coastguard Worker showargs 4 "$@" 4321*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4322*7c356e86SAndroid Build Coastguard Worker <1> <A> <B> <C> . 4323*7c356e86SAndroid Build Coastguard Worker <2> <A B C> . 4324*7c356e86SAndroid Build Coastguard Worker <3> <A> <B> <C> . 4325*7c356e86SAndroid Build Coastguard Worker <4> <A> <B> <C> . 4326*7c356e86SAndroid Build Coastguard Worker--- 4327*7c356e86SAndroid Build Coastguard Workername: IFS-colon-1 4328*7c356e86SAndroid Build Coastguard Workerdescription: 4329*7c356e86SAndroid Build Coastguard Worker Simple test, IFS=: 4330*7c356e86SAndroid Build Coastguard Workerstdin: 4331*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4332*7c356e86SAndroid Build Coastguard Worker IFS=: 4333*7c356e86SAndroid Build Coastguard Worker set -- A B C 4334*7c356e86SAndroid Build Coastguard Worker showargs 1 $* 4335*7c356e86SAndroid Build Coastguard Worker showargs 2 "$*" 4336*7c356e86SAndroid Build Coastguard Worker showargs 3 $@ 4337*7c356e86SAndroid Build Coastguard Worker showargs 4 "$@" 4338*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4339*7c356e86SAndroid Build Coastguard Worker <1> <A> <B> <C> . 4340*7c356e86SAndroid Build Coastguard Worker <2> <A:B:C> . 4341*7c356e86SAndroid Build Coastguard Worker <3> <A> <B> <C> . 4342*7c356e86SAndroid Build Coastguard Worker <4> <A> <B> <C> . 4343*7c356e86SAndroid Build Coastguard Worker--- 4344*7c356e86SAndroid Build Coastguard Workername: IFS-null-1 4345*7c356e86SAndroid Build Coastguard Workerdescription: 4346*7c356e86SAndroid Build Coastguard Worker Simple test, IFS="" 4347*7c356e86SAndroid Build Coastguard Workerstdin: 4348*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4349*7c356e86SAndroid Build Coastguard Worker IFS="" 4350*7c356e86SAndroid Build Coastguard Worker set -- A B C 4351*7c356e86SAndroid Build Coastguard Worker showargs 1 $* 4352*7c356e86SAndroid Build Coastguard Worker showargs 2 "$*" 4353*7c356e86SAndroid Build Coastguard Worker showargs 3 $@ 4354*7c356e86SAndroid Build Coastguard Worker showargs 4 "$@" 4355*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4356*7c356e86SAndroid Build Coastguard Worker <1> <A> <B> <C> . 4357*7c356e86SAndroid Build Coastguard Worker <2> <ABC> . 4358*7c356e86SAndroid Build Coastguard Worker <3> <A> <B> <C> . 4359*7c356e86SAndroid Build Coastguard Worker <4> <A> <B> <C> . 4360*7c356e86SAndroid Build Coastguard Worker--- 4361*7c356e86SAndroid Build Coastguard Workername: IFS-space-colon-1 4362*7c356e86SAndroid Build Coastguard Workerdescription: 4363*7c356e86SAndroid Build Coastguard Worker Simple test, IFS=<white-space>: 4364*7c356e86SAndroid Build Coastguard Workerstdin: 4365*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4366*7c356e86SAndroid Build Coastguard Worker IFS="$IFS:" 4367*7c356e86SAndroid Build Coastguard Worker set -- 4368*7c356e86SAndroid Build Coastguard Worker showargs 1 $* 4369*7c356e86SAndroid Build Coastguard Worker showargs 2 "$*" 4370*7c356e86SAndroid Build Coastguard Worker showargs 3 $@ 4371*7c356e86SAndroid Build Coastguard Worker showargs 4 "$@" 4372*7c356e86SAndroid Build Coastguard Worker showargs 5 : "$@" 4373*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4374*7c356e86SAndroid Build Coastguard Worker <1> . 4375*7c356e86SAndroid Build Coastguard Worker <2> <> . 4376*7c356e86SAndroid Build Coastguard Worker <3> . 4377*7c356e86SAndroid Build Coastguard Worker <4> . 4378*7c356e86SAndroid Build Coastguard Worker <5> <:> . 4379*7c356e86SAndroid Build Coastguard Worker--- 4380*7c356e86SAndroid Build Coastguard Workername: IFS-space-colon-2 4381*7c356e86SAndroid Build Coastguard Workerdescription: 4382*7c356e86SAndroid Build Coastguard Worker Simple test, IFS=<white-space>: 4383*7c356e86SAndroid Build Coastguard Worker AT&T ksh fails this, POSIX says the test is correct. 4384*7c356e86SAndroid Build Coastguard Workerstdin: 4385*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4386*7c356e86SAndroid Build Coastguard Worker IFS="$IFS:" 4387*7c356e86SAndroid Build Coastguard Worker set -- 4388*7c356e86SAndroid Build Coastguard Worker showargs :"$@" 4389*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4390*7c356e86SAndroid Build Coastguard Worker <:> . 4391*7c356e86SAndroid Build Coastguard Worker--- 4392*7c356e86SAndroid Build Coastguard Workername: IFS-space-colon-4 4393*7c356e86SAndroid Build Coastguard Workerdescription: 4394*7c356e86SAndroid Build Coastguard Worker Simple test, IFS=<white-space>: 4395*7c356e86SAndroid Build Coastguard Workerstdin: 4396*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4397*7c356e86SAndroid Build Coastguard Worker IFS="$IFS:" 4398*7c356e86SAndroid Build Coastguard Worker set -- 4399*7c356e86SAndroid Build Coastguard Worker showargs "$@$@" 4400*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4401*7c356e86SAndroid Build Coastguard Worker . 4402*7c356e86SAndroid Build Coastguard Worker--- 4403*7c356e86SAndroid Build Coastguard Workername: IFS-space-colon-5 4404*7c356e86SAndroid Build Coastguard Workerdescription: 4405*7c356e86SAndroid Build Coastguard Worker Simple test, IFS=<white-space>: 4406*7c356e86SAndroid Build Coastguard Worker Don't know what POSIX thinks of this. AT&T ksh does not do this. 4407*7c356e86SAndroid Build Coastguard Workerstdin: 4408*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4409*7c356e86SAndroid Build Coastguard Worker IFS="$IFS:" 4410*7c356e86SAndroid Build Coastguard Worker set -- 4411*7c356e86SAndroid Build Coastguard Worker showargs "${@:-}" 4412*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4413*7c356e86SAndroid Build Coastguard Worker <> . 4414*7c356e86SAndroid Build Coastguard Worker--- 4415*7c356e86SAndroid Build Coastguard Workername: IFS-subst-1 4416*7c356e86SAndroid Build Coastguard Workerdescription: 4417*7c356e86SAndroid Build Coastguard Worker Simple test, IFS=<white-space>: 4418*7c356e86SAndroid Build Coastguard Workerstdin: 4419*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4420*7c356e86SAndroid Build Coastguard Worker IFS="$IFS:" 4421*7c356e86SAndroid Build Coastguard Worker x=":b: :" 4422*7c356e86SAndroid Build Coastguard Worker echo -n '1:'; for i in $x ; do echo -n " [$i]" ; done ; echo 4423*7c356e86SAndroid Build Coastguard Worker echo -n '2:'; for i in :b:: ; do echo -n " [$i]" ; done ; echo 4424*7c356e86SAndroid Build Coastguard Worker showargs 3 $x 4425*7c356e86SAndroid Build Coastguard Worker showargs 4 :b:: 4426*7c356e86SAndroid Build Coastguard Worker x="a:b:" 4427*7c356e86SAndroid Build Coastguard Worker echo -n '5:'; for i in $x ; do echo -n " [$i]" ; done ; echo 4428*7c356e86SAndroid Build Coastguard Worker showargs 6 $x 4429*7c356e86SAndroid Build Coastguard Worker x="a::c" 4430*7c356e86SAndroid Build Coastguard Worker echo -n '7:'; for i in $x ; do echo -n " [$i]" ; done ; echo 4431*7c356e86SAndroid Build Coastguard Worker showargs 8 $x 4432*7c356e86SAndroid Build Coastguard Worker echo -n '9:'; for i in ${FOO-`echo -n h:i`th:ere} ; do echo -n " [$i]" ; done ; echo 4433*7c356e86SAndroid Build Coastguard Worker showargs 10 ${FOO-`echo -n h:i`th:ere} 4434*7c356e86SAndroid Build Coastguard Worker showargs 11 "${FOO-`echo -n h:i`th:ere}" 4435*7c356e86SAndroid Build Coastguard Worker x=" A : B::D" 4436*7c356e86SAndroid Build Coastguard Worker echo -n '12:'; for i in $x ; do echo -n " [$i]" ; done ; echo 4437*7c356e86SAndroid Build Coastguard Worker showargs 13 $x 4438*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4439*7c356e86SAndroid Build Coastguard Worker 1: [] [b] [] 4440*7c356e86SAndroid Build Coastguard Worker 2: [:b::] 4441*7c356e86SAndroid Build Coastguard Worker <3> <> <b> <> . 4442*7c356e86SAndroid Build Coastguard Worker <4> <:b::> . 4443*7c356e86SAndroid Build Coastguard Worker 5: [a] [b] 4444*7c356e86SAndroid Build Coastguard Worker <6> <a> <b> . 4445*7c356e86SAndroid Build Coastguard Worker 7: [a] [] [c] 4446*7c356e86SAndroid Build Coastguard Worker <8> <a> <> <c> . 4447*7c356e86SAndroid Build Coastguard Worker 9: [h] [ith] [ere] 4448*7c356e86SAndroid Build Coastguard Worker <10> <h> <ith> <ere> . 4449*7c356e86SAndroid Build Coastguard Worker <11> <h:ith:ere> . 4450*7c356e86SAndroid Build Coastguard Worker 12: [A] [B] [] [D] 4451*7c356e86SAndroid Build Coastguard Worker <13> <A> <B> <> <D> . 4452*7c356e86SAndroid Build Coastguard Worker--- 4453*7c356e86SAndroid Build Coastguard Workername: IFS-subst-2 4454*7c356e86SAndroid Build Coastguard Workerdescription: 4455*7c356e86SAndroid Build Coastguard Worker Check leading whitespace after trim does not make a field 4456*7c356e86SAndroid Build Coastguard Workerstdin: 4457*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4458*7c356e86SAndroid Build Coastguard Worker x="X 1 2" 4459*7c356e86SAndroid Build Coastguard Worker showargs 1 shift ${x#X} 4460*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4461*7c356e86SAndroid Build Coastguard Worker <1> <shift> <1> <2> . 4462*7c356e86SAndroid Build Coastguard Worker--- 4463*7c356e86SAndroid Build Coastguard Workername: IFS-subst-3-arr 4464*7c356e86SAndroid Build Coastguard Workerdescription: 4465*7c356e86SAndroid Build Coastguard Worker Check leading IFS non-whitespace after trim does make a field 4466*7c356e86SAndroid Build Coastguard Worker but leading IFS whitespace does not, nor empty replacements 4467*7c356e86SAndroid Build Coastguard Workerstdin: 4468*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4469*7c356e86SAndroid Build Coastguard Worker showargs 0 ${-+} 4470*7c356e86SAndroid Build Coastguard Worker IFS=: 4471*7c356e86SAndroid Build Coastguard Worker showargs 1 ${-+:foo:bar} 4472*7c356e86SAndroid Build Coastguard Worker IFS=' ' 4473*7c356e86SAndroid Build Coastguard Worker showargs 2 ${-+ foo bar} 4474*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4475*7c356e86SAndroid Build Coastguard Worker <0> . 4476*7c356e86SAndroid Build Coastguard Worker <1> <> <foo> <bar> . 4477*7c356e86SAndroid Build Coastguard Worker <2> <foo> <bar> . 4478*7c356e86SAndroid Build Coastguard Worker--- 4479*7c356e86SAndroid Build Coastguard Workername: IFS-subst-3-ass 4480*7c356e86SAndroid Build Coastguard Workerdescription: 4481*7c356e86SAndroid Build Coastguard Worker Check non-field semantics 4482*7c356e86SAndroid Build Coastguard Workerstdin: 4483*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4484*7c356e86SAndroid Build Coastguard Worker showargs 0 x=${-+} 4485*7c356e86SAndroid Build Coastguard Worker IFS=: 4486*7c356e86SAndroid Build Coastguard Worker showargs 1 x=${-+:foo:bar} 4487*7c356e86SAndroid Build Coastguard Worker IFS=' ' 4488*7c356e86SAndroid Build Coastguard Worker showargs 2 x=${-+ foo bar} 4489*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4490*7c356e86SAndroid Build Coastguard Worker <0> <x=> . 4491*7c356e86SAndroid Build Coastguard Worker <1> <x=> <foo> <bar> . 4492*7c356e86SAndroid Build Coastguard Worker <2> <x=> <foo> <bar> . 4493*7c356e86SAndroid Build Coastguard Worker--- 4494*7c356e86SAndroid Build Coastguard Workername: IFS-subst-3-lcl 4495*7c356e86SAndroid Build Coastguard Workerdescription: 4496*7c356e86SAndroid Build Coastguard Worker Check non-field semantics, smaller corner case (LP#1381965) 4497*7c356e86SAndroid Build Coastguard Workerstdin: 4498*7c356e86SAndroid Build Coastguard Worker set -x 4499*7c356e86SAndroid Build Coastguard Worker local regex=${2:-} 4500*7c356e86SAndroid Build Coastguard Worker exit 1 4501*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 4502*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 4503*7c356e86SAndroid Build Coastguard Worker /regex=/ 4504*7c356e86SAndroid Build Coastguard Worker--- 4505*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-1 4506*7c356e86SAndroid Build Coastguard Workerdescription: 4507*7c356e86SAndroid Build Coastguard Worker reported by mikeserv 4508*7c356e86SAndroid Build Coastguard Workerstdin: 4509*7c356e86SAndroid Build Coastguard Worker pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; } 4510*7c356e86SAndroid Build Coastguard Worker a='space divded argument 4511*7c356e86SAndroid Build Coastguard Worker here' 4512*7c356e86SAndroid Build Coastguard Worker IFS=\ ; set -- $a 4513*7c356e86SAndroid Build Coastguard Worker IFS= ; q="$*" ; nq=$* 4514*7c356e86SAndroid Build Coastguard Worker pfn "$*" $* "$q" "$nq" 4515*7c356e86SAndroid Build Coastguard Worker [ "$q" = "$nq" ] && echo =true || echo =false 4516*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4517*7c356e86SAndroid Build Coastguard Worker <spacedivdedargument 4518*7c356e86SAndroid Build Coastguard Worker here> 4519*7c356e86SAndroid Build Coastguard Worker <space> 4520*7c356e86SAndroid Build Coastguard Worker <divded> 4521*7c356e86SAndroid Build Coastguard Worker <argument 4522*7c356e86SAndroid Build Coastguard Worker here> 4523*7c356e86SAndroid Build Coastguard Worker <spacedivdedargument 4524*7c356e86SAndroid Build Coastguard Worker here> 4525*7c356e86SAndroid Build Coastguard Worker <spacedivdedargument 4526*7c356e86SAndroid Build Coastguard Worker here> 4527*7c356e86SAndroid Build Coastguard Worker =true 4528*7c356e86SAndroid Build Coastguard Worker--- 4529*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-2 4530*7c356e86SAndroid Build Coastguard Workerdescription: 4531*7c356e86SAndroid Build Coastguard Worker extended testsuite based on problem by mikeserv 4532*7c356e86SAndroid Build Coastguard Workerstdin: 4533*7c356e86SAndroid Build Coastguard Worker pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; } 4534*7c356e86SAndroid Build Coastguard Worker a='space divded argument 4535*7c356e86SAndroid Build Coastguard Worker here' 4536*7c356e86SAndroid Build Coastguard Worker IFS=\ ; set -- $a 4537*7c356e86SAndroid Build Coastguard Worker IFS= ; q="$@" ; nq=$@ 4538*7c356e86SAndroid Build Coastguard Worker pfn "$*" $* "$q" "$nq" 4539*7c356e86SAndroid Build Coastguard Worker [ "$q" = "$nq" ] && echo =true || echo =false 4540*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4541*7c356e86SAndroid Build Coastguard Worker <spacedivdedargument 4542*7c356e86SAndroid Build Coastguard Worker here> 4543*7c356e86SAndroid Build Coastguard Worker <space> 4544*7c356e86SAndroid Build Coastguard Worker <divded> 4545*7c356e86SAndroid Build Coastguard Worker <argument 4546*7c356e86SAndroid Build Coastguard Worker here> 4547*7c356e86SAndroid Build Coastguard Worker <space divded argument 4548*7c356e86SAndroid Build Coastguard Worker here> 4549*7c356e86SAndroid Build Coastguard Worker <space divded argument 4550*7c356e86SAndroid Build Coastguard Worker here> 4551*7c356e86SAndroid Build Coastguard Worker =true 4552*7c356e86SAndroid Build Coastguard Worker--- 4553*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-3 4554*7c356e86SAndroid Build Coastguard Workerdescription: 4555*7c356e86SAndroid Build Coastguard Worker extended testsuite based on problem by mikeserv 4556*7c356e86SAndroid Build Coastguard Workerstdin: 4557*7c356e86SAndroid Build Coastguard Worker pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; } 4558*7c356e86SAndroid Build Coastguard Worker a='space divded argument 4559*7c356e86SAndroid Build Coastguard Worker here' 4560*7c356e86SAndroid Build Coastguard Worker IFS=\ ; set -- $a; IFS= 4561*7c356e86SAndroid Build Coastguard Worker qs="$*" 4562*7c356e86SAndroid Build Coastguard Worker nqs=$* 4563*7c356e86SAndroid Build Coastguard Worker qk="$@" 4564*7c356e86SAndroid Build Coastguard Worker nqk=$@ 4565*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qs '; pfn "$qs" 4566*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqs '; pfn "$nqs" 4567*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qk '; pfn "$qk" 4568*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqk '; pfn "$nqk" 4569*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qs '; pfn "$*" 4570*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqs '; pfn $* 4571*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qk '; pfn "$@" 4572*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqk '; pfn $@ 4573*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4574*7c356e86SAndroid Build Coastguard Worker = qs <spacedivdedargument 4575*7c356e86SAndroid Build Coastguard Worker here> 4576*7c356e86SAndroid Build Coastguard Worker =nqs <spacedivdedargument 4577*7c356e86SAndroid Build Coastguard Worker here> 4578*7c356e86SAndroid Build Coastguard Worker = qk <space divded argument 4579*7c356e86SAndroid Build Coastguard Worker here> 4580*7c356e86SAndroid Build Coastguard Worker =nqk <space divded argument 4581*7c356e86SAndroid Build Coastguard Worker here> 4582*7c356e86SAndroid Build Coastguard Worker ~ qs <spacedivdedargument 4583*7c356e86SAndroid Build Coastguard Worker here> 4584*7c356e86SAndroid Build Coastguard Worker ~nqs <space> 4585*7c356e86SAndroid Build Coastguard Worker <divded> 4586*7c356e86SAndroid Build Coastguard Worker <argument 4587*7c356e86SAndroid Build Coastguard Worker here> 4588*7c356e86SAndroid Build Coastguard Worker ~ qk <space> 4589*7c356e86SAndroid Build Coastguard Worker <divded> 4590*7c356e86SAndroid Build Coastguard Worker <argument 4591*7c356e86SAndroid Build Coastguard Worker here> 4592*7c356e86SAndroid Build Coastguard Worker ~nqk <space> 4593*7c356e86SAndroid Build Coastguard Worker <divded> 4594*7c356e86SAndroid Build Coastguard Worker <argument 4595*7c356e86SAndroid Build Coastguard Worker here> 4596*7c356e86SAndroid Build Coastguard Worker--- 4597*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-4 4598*7c356e86SAndroid Build Coastguard Workerdescription: 4599*7c356e86SAndroid Build Coastguard Worker extended testsuite based on problem by mikeserv 4600*7c356e86SAndroid Build Coastguard Workerstdin: 4601*7c356e86SAndroid Build Coastguard Worker pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; } 4602*7c356e86SAndroid Build Coastguard Worker a='space divded argument 4603*7c356e86SAndroid Build Coastguard Worker here' 4604*7c356e86SAndroid Build Coastguard Worker IFS=\ ; set -- $a; IFS= 4605*7c356e86SAndroid Build Coastguard Worker qs="$*" 4606*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qs '; pfn "$qs" 4607*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qs '; pfn "$*" 4608*7c356e86SAndroid Build Coastguard Worker nqs=$* 4609*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqs '; pfn "$nqs" 4610*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqs '; pfn $* 4611*7c356e86SAndroid Build Coastguard Worker qk="$@" 4612*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qk '; pfn "$qk" 4613*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qk '; pfn "$@" 4614*7c356e86SAndroid Build Coastguard Worker nqk=$@ 4615*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqk '; pfn "$nqk" 4616*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqk '; pfn $@ 4617*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4618*7c356e86SAndroid Build Coastguard Worker = qs <spacedivdedargument 4619*7c356e86SAndroid Build Coastguard Worker here> 4620*7c356e86SAndroid Build Coastguard Worker ~ qs <spacedivdedargument 4621*7c356e86SAndroid Build Coastguard Worker here> 4622*7c356e86SAndroid Build Coastguard Worker =nqs <spacedivdedargument 4623*7c356e86SAndroid Build Coastguard Worker here> 4624*7c356e86SAndroid Build Coastguard Worker ~nqs <space> 4625*7c356e86SAndroid Build Coastguard Worker <divded> 4626*7c356e86SAndroid Build Coastguard Worker <argument 4627*7c356e86SAndroid Build Coastguard Worker here> 4628*7c356e86SAndroid Build Coastguard Worker = qk <space divded argument 4629*7c356e86SAndroid Build Coastguard Worker here> 4630*7c356e86SAndroid Build Coastguard Worker ~ qk <space> 4631*7c356e86SAndroid Build Coastguard Worker <divded> 4632*7c356e86SAndroid Build Coastguard Worker <argument 4633*7c356e86SAndroid Build Coastguard Worker here> 4634*7c356e86SAndroid Build Coastguard Worker =nqk <space divded argument 4635*7c356e86SAndroid Build Coastguard Worker here> 4636*7c356e86SAndroid Build Coastguard Worker ~nqk <space> 4637*7c356e86SAndroid Build Coastguard Worker <divded> 4638*7c356e86SAndroid Build Coastguard Worker <argument 4639*7c356e86SAndroid Build Coastguard Worker here> 4640*7c356e86SAndroid Build Coastguard Worker--- 4641*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-4p 4642*7c356e86SAndroid Build Coastguard Workerdescription: 4643*7c356e86SAndroid Build Coastguard Worker extended testsuite based on problem by mikeserv 4644*7c356e86SAndroid Build Coastguard Workerstdin: 4645*7c356e86SAndroid Build Coastguard Worker pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; } 4646*7c356e86SAndroid Build Coastguard Worker a='space divded argument 4647*7c356e86SAndroid Build Coastguard Worker here' 4648*7c356e86SAndroid Build Coastguard Worker IFS=\ ; set -- $a; IFS= 4649*7c356e86SAndroid Build Coastguard Worker unset v 4650*7c356e86SAndroid Build Coastguard Worker qs=${v:-"$*"} 4651*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qs '; pfn "$qs" 4652*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qs '; pfn ${v:-"$*"} 4653*7c356e86SAndroid Build Coastguard Worker nqs=${v:-$*} 4654*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqs '; pfn "$nqs" 4655*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqs '; pfn ${v:-$*} 4656*7c356e86SAndroid Build Coastguard Worker qk=${v:-"$@"} 4657*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qk '; pfn "$qk" 4658*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qk '; pfn ${v:-"$@"} 4659*7c356e86SAndroid Build Coastguard Worker nqk=${v:-$@} 4660*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqk '; pfn "$nqk" 4661*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqk '; pfn ${v:-$@} 4662*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4663*7c356e86SAndroid Build Coastguard Worker = qs <spacedivdedargument 4664*7c356e86SAndroid Build Coastguard Worker here> 4665*7c356e86SAndroid Build Coastguard Worker ~ qs <spacedivdedargument 4666*7c356e86SAndroid Build Coastguard Worker here> 4667*7c356e86SAndroid Build Coastguard Worker =nqs <spacedivdedargument 4668*7c356e86SAndroid Build Coastguard Worker here> 4669*7c356e86SAndroid Build Coastguard Worker ~nqs <space> 4670*7c356e86SAndroid Build Coastguard Worker <divded> 4671*7c356e86SAndroid Build Coastguard Worker <argument 4672*7c356e86SAndroid Build Coastguard Worker here> 4673*7c356e86SAndroid Build Coastguard Worker = qk <space divded argument 4674*7c356e86SAndroid Build Coastguard Worker here> 4675*7c356e86SAndroid Build Coastguard Worker ~ qk <space> 4676*7c356e86SAndroid Build Coastguard Worker <divded> 4677*7c356e86SAndroid Build Coastguard Worker <argument 4678*7c356e86SAndroid Build Coastguard Worker here> 4679*7c356e86SAndroid Build Coastguard Worker =nqk <space divded argument 4680*7c356e86SAndroid Build Coastguard Worker here> 4681*7c356e86SAndroid Build Coastguard Worker ~nqk <space> 4682*7c356e86SAndroid Build Coastguard Worker <divded> 4683*7c356e86SAndroid Build Coastguard Worker <argument 4684*7c356e86SAndroid Build Coastguard Worker here> 4685*7c356e86SAndroid Build Coastguard Worker--- 4686*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-5 4687*7c356e86SAndroid Build Coastguard Workerdescription: 4688*7c356e86SAndroid Build Coastguard Worker extended testsuite based on problem by mikeserv 4689*7c356e86SAndroid Build Coastguard Workerstdin: 4690*7c356e86SAndroid Build Coastguard Worker pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; } 4691*7c356e86SAndroid Build Coastguard Worker a='space divded argument 4692*7c356e86SAndroid Build Coastguard Worker here' 4693*7c356e86SAndroid Build Coastguard Worker IFS=\ ; set -- $a; IFS=, 4694*7c356e86SAndroid Build Coastguard Worker qs="$*" 4695*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qs '; pfn "$qs" 4696*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qs '; pfn "$*" 4697*7c356e86SAndroid Build Coastguard Worker nqs=$* 4698*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqs '; pfn "$nqs" 4699*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqs '; pfn $* 4700*7c356e86SAndroid Build Coastguard Worker qk="$@" 4701*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qk '; pfn "$qk" 4702*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qk '; pfn "$@" 4703*7c356e86SAndroid Build Coastguard Worker nqk=$@ 4704*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqk '; pfn "$nqk" 4705*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqk '; pfn $@ 4706*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4707*7c356e86SAndroid Build Coastguard Worker = qs <space,divded,argument 4708*7c356e86SAndroid Build Coastguard Worker here> 4709*7c356e86SAndroid Build Coastguard Worker ~ qs <space,divded,argument 4710*7c356e86SAndroid Build Coastguard Worker here> 4711*7c356e86SAndroid Build Coastguard Worker =nqs <space,divded,argument 4712*7c356e86SAndroid Build Coastguard Worker here> 4713*7c356e86SAndroid Build Coastguard Worker ~nqs <space> 4714*7c356e86SAndroid Build Coastguard Worker <divded> 4715*7c356e86SAndroid Build Coastguard Worker <argument 4716*7c356e86SAndroid Build Coastguard Worker here> 4717*7c356e86SAndroid Build Coastguard Worker = qk <space divded argument 4718*7c356e86SAndroid Build Coastguard Worker here> 4719*7c356e86SAndroid Build Coastguard Worker ~ qk <space> 4720*7c356e86SAndroid Build Coastguard Worker <divded> 4721*7c356e86SAndroid Build Coastguard Worker <argument 4722*7c356e86SAndroid Build Coastguard Worker here> 4723*7c356e86SAndroid Build Coastguard Worker =nqk <space divded argument 4724*7c356e86SAndroid Build Coastguard Worker here> 4725*7c356e86SAndroid Build Coastguard Worker ~nqk <space> 4726*7c356e86SAndroid Build Coastguard Worker <divded> 4727*7c356e86SAndroid Build Coastguard Worker <argument 4728*7c356e86SAndroid Build Coastguard Worker here> 4729*7c356e86SAndroid Build Coastguard Worker--- 4730*7c356e86SAndroid Build Coastguard Workername: IFS-subst-4-5p 4731*7c356e86SAndroid Build Coastguard Workerdescription: 4732*7c356e86SAndroid Build Coastguard Worker extended testsuite based on problem by mikeserv 4733*7c356e86SAndroid Build Coastguard Workerstdin: 4734*7c356e86SAndroid Build Coastguard Worker pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; } 4735*7c356e86SAndroid Build Coastguard Worker a='space divded argument 4736*7c356e86SAndroid Build Coastguard Worker here' 4737*7c356e86SAndroid Build Coastguard Worker IFS=\ ; set -- $a; IFS=, 4738*7c356e86SAndroid Build Coastguard Worker unset v 4739*7c356e86SAndroid Build Coastguard Worker qs=${v:-"$*"} 4740*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qs '; pfn "$qs" 4741*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qs '; pfn ${v:-"$*"} 4742*7c356e86SAndroid Build Coastguard Worker nqs=${v:-$*} 4743*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqs '; pfn "$nqs" 4744*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqs '; pfn ${v:-$*} 4745*7c356e86SAndroid Build Coastguard Worker qk=${v:-"$@"} 4746*7c356e86SAndroid Build Coastguard Worker print -nr -- '= qk '; pfn "$qk" 4747*7c356e86SAndroid Build Coastguard Worker print -nr -- '~ qk '; pfn ${v:-"$@"} 4748*7c356e86SAndroid Build Coastguard Worker nqk=${v:-$@} 4749*7c356e86SAndroid Build Coastguard Worker print -nr -- '=nqk '; pfn "$nqk" 4750*7c356e86SAndroid Build Coastguard Worker print -nr -- '~nqk '; pfn ${v:-$@} 4751*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4752*7c356e86SAndroid Build Coastguard Worker = qs <space,divded,argument 4753*7c356e86SAndroid Build Coastguard Worker here> 4754*7c356e86SAndroid Build Coastguard Worker ~ qs <space,divded,argument 4755*7c356e86SAndroid Build Coastguard Worker here> 4756*7c356e86SAndroid Build Coastguard Worker =nqs <space,divded,argument 4757*7c356e86SAndroid Build Coastguard Worker here> 4758*7c356e86SAndroid Build Coastguard Worker ~nqs <space> 4759*7c356e86SAndroid Build Coastguard Worker <divded> 4760*7c356e86SAndroid Build Coastguard Worker <argument 4761*7c356e86SAndroid Build Coastguard Worker here> 4762*7c356e86SAndroid Build Coastguard Worker = qk <space divded argument 4763*7c356e86SAndroid Build Coastguard Worker here> 4764*7c356e86SAndroid Build Coastguard Worker ~ qk <space> 4765*7c356e86SAndroid Build Coastguard Worker <divded> 4766*7c356e86SAndroid Build Coastguard Worker <argument 4767*7c356e86SAndroid Build Coastguard Worker here> 4768*7c356e86SAndroid Build Coastguard Worker =nqk <space divded argument 4769*7c356e86SAndroid Build Coastguard Worker here> 4770*7c356e86SAndroid Build Coastguard Worker ~nqk <space> 4771*7c356e86SAndroid Build Coastguard Worker <divded> 4772*7c356e86SAndroid Build Coastguard Worker <argument 4773*7c356e86SAndroid Build Coastguard Worker here> 4774*7c356e86SAndroid Build Coastguard Worker--- 4775*7c356e86SAndroid Build Coastguard Workername: IFS-subst-5 4776*7c356e86SAndroid Build Coastguard Workerdescription: 4777*7c356e86SAndroid Build Coastguard Worker extended testsuite based on IFS-subst-3 4778*7c356e86SAndroid Build Coastguard Worker differs slightly from ksh93: 4779*7c356e86SAndroid Build Coastguard Worker - omit trailing field in a3zna, a7ina (unquoted $@ expansion) 4780*7c356e86SAndroid Build Coastguard Worker - has extra middle fields in b5ins, b7ina (IFS_NWS unquoted expansion) 4781*7c356e86SAndroid Build Coastguard Worker differs slightly from bash: 4782*7c356e86SAndroid Build Coastguard Worker - omit leading field in a5ins, a7ina (IFS_NWS unquoted expansion) 4783*7c356e86SAndroid Build Coastguard Worker differs slightly from zsh: 4784*7c356e86SAndroid Build Coastguard Worker - differs in assignment, not expansion; probably zsh bug 4785*7c356e86SAndroid Build Coastguard Worker - has extra middle fields in b5ins, b7ina (IFS_NWS unquoted expansion) 4786*7c356e86SAndroid Build Coastguard Worker 'emulate sh' zsh has extra fields in 4787*7c356e86SAndroid Build Coastguard Worker - a5ins (IFS_NWS unquoted $*) 4788*7c356e86SAndroid Build Coastguard Worker - b5ins, matching mksh’s 4789*7c356e86SAndroid Build Coastguard Worker !!WARNING!! more to come: http://austingroupbugs.net/view.php?id=888 4790*7c356e86SAndroid Build Coastguard Workerstdin: 4791*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4792*7c356e86SAndroid Build Coastguard Worker IFS=; set -- "" 2 ""; pfb $*; x=$*; pfn "$x"' 4793*7c356e86SAndroid Build Coastguard Worker echo '=a1zns' 4794*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4795*7c356e86SAndroid Build Coastguard Worker IFS=; set -- "" 2 ""; pfb "$*"; x="$*"; pfn "$x"' 4796*7c356e86SAndroid Build Coastguard Worker echo '=a2zqs' 4797*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4798*7c356e86SAndroid Build Coastguard Worker IFS=; set -- "" 2 ""; pfb $@; x=$@; pfn "$x"' 4799*7c356e86SAndroid Build Coastguard Worker echo '=a3zna' 4800*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4801*7c356e86SAndroid Build Coastguard Worker IFS=; set -- "" 2 ""; pfb "$@"; x="$@"; pfn "$x"' 4802*7c356e86SAndroid Build Coastguard Worker echo '=a4zqa' 4803*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4804*7c356e86SAndroid Build Coastguard Worker IFS=,; set -- "" 2 ""; pfb $*; x=$*; pfn "$x"' 4805*7c356e86SAndroid Build Coastguard Worker echo '=a5ins' 4806*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4807*7c356e86SAndroid Build Coastguard Worker IFS=,; set -- "" 2 ""; pfb "$*"; x="$*"; pfn "$x"' 4808*7c356e86SAndroid Build Coastguard Worker echo '=a6iqs' 4809*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4810*7c356e86SAndroid Build Coastguard Worker IFS=,; set -- "" 2 ""; pfb $@; x=$@; pfn "$x"' 4811*7c356e86SAndroid Build Coastguard Worker echo '=a7ina' 4812*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4813*7c356e86SAndroid Build Coastguard Worker IFS=,; set -- "" 2 ""; pfb "$@"; x="$@"; pfn "$x"' 4814*7c356e86SAndroid Build Coastguard Worker echo '=a8iqa' 4815*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4816*7c356e86SAndroid Build Coastguard Worker IFS=; set -- A B "" "" C; pfb $*; x=$*; pfn "$x"' 4817*7c356e86SAndroid Build Coastguard Worker echo '=b1zns' 4818*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4819*7c356e86SAndroid Build Coastguard Worker IFS=; set -- A B "" "" C; pfb "$*"; x="$*"; pfn "$x"' 4820*7c356e86SAndroid Build Coastguard Worker echo '=b2zqs' 4821*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4822*7c356e86SAndroid Build Coastguard Worker IFS=; set -- A B "" "" C; pfb $@; x=$@; pfn "$x"' 4823*7c356e86SAndroid Build Coastguard Worker echo '=b3zna' 4824*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4825*7c356e86SAndroid Build Coastguard Worker IFS=; set -- A B "" "" C; pfb "$@"; x="$@"; pfn "$x"' 4826*7c356e86SAndroid Build Coastguard Worker echo '=b4zqa' 4827*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4828*7c356e86SAndroid Build Coastguard Worker IFS=,; set -- A B "" "" C; pfb $*; x=$*; pfn "$x"' 4829*7c356e86SAndroid Build Coastguard Worker echo '=b5ins' 4830*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4831*7c356e86SAndroid Build Coastguard Worker IFS=,; set -- A B "" "" C; pfb "$*"; x="$*"; pfn "$x"' 4832*7c356e86SAndroid Build Coastguard Worker echo '=b6iqs' 4833*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4834*7c356e86SAndroid Build Coastguard Worker IFS=,; set -- A B "" "" C; pfb $@; x=$@; pfn "$x"' 4835*7c356e86SAndroid Build Coastguard Worker echo '=b7ina' 4836*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfb() { for s_arg in "$@"; do print -r -- "[$s_arg]"; done; }; pfn() { for s_arg in "$@"; do print -r -- "<$s_arg>"; done; }; 4837*7c356e86SAndroid Build Coastguard Worker IFS=,; set -- A B "" "" C; pfb "$@"; x="$@"; pfn "$x"' 4838*7c356e86SAndroid Build Coastguard Worker echo '=b8iqa' 4839*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4840*7c356e86SAndroid Build Coastguard Worker [2] 4841*7c356e86SAndroid Build Coastguard Worker <2> 4842*7c356e86SAndroid Build Coastguard Worker =a1zns 4843*7c356e86SAndroid Build Coastguard Worker [2] 4844*7c356e86SAndroid Build Coastguard Worker <2> 4845*7c356e86SAndroid Build Coastguard Worker =a2zqs 4846*7c356e86SAndroid Build Coastguard Worker [2] 4847*7c356e86SAndroid Build Coastguard Worker < 2 > 4848*7c356e86SAndroid Build Coastguard Worker =a3zna 4849*7c356e86SAndroid Build Coastguard Worker [] 4850*7c356e86SAndroid Build Coastguard Worker [2] 4851*7c356e86SAndroid Build Coastguard Worker [] 4852*7c356e86SAndroid Build Coastguard Worker < 2 > 4853*7c356e86SAndroid Build Coastguard Worker =a4zqa 4854*7c356e86SAndroid Build Coastguard Worker [2] 4855*7c356e86SAndroid Build Coastguard Worker <,2,> 4856*7c356e86SAndroid Build Coastguard Worker =a5ins 4857*7c356e86SAndroid Build Coastguard Worker [,2,] 4858*7c356e86SAndroid Build Coastguard Worker <,2,> 4859*7c356e86SAndroid Build Coastguard Worker =a6iqs 4860*7c356e86SAndroid Build Coastguard Worker [2] 4861*7c356e86SAndroid Build Coastguard Worker < 2 > 4862*7c356e86SAndroid Build Coastguard Worker =a7ina 4863*7c356e86SAndroid Build Coastguard Worker [] 4864*7c356e86SAndroid Build Coastguard Worker [2] 4865*7c356e86SAndroid Build Coastguard Worker [] 4866*7c356e86SAndroid Build Coastguard Worker < 2 > 4867*7c356e86SAndroid Build Coastguard Worker =a8iqa 4868*7c356e86SAndroid Build Coastguard Worker [A] 4869*7c356e86SAndroid Build Coastguard Worker [B] 4870*7c356e86SAndroid Build Coastguard Worker [C] 4871*7c356e86SAndroid Build Coastguard Worker <ABC> 4872*7c356e86SAndroid Build Coastguard Worker =b1zns 4873*7c356e86SAndroid Build Coastguard Worker [ABC] 4874*7c356e86SAndroid Build Coastguard Worker <ABC> 4875*7c356e86SAndroid Build Coastguard Worker =b2zqs 4876*7c356e86SAndroid Build Coastguard Worker [A] 4877*7c356e86SAndroid Build Coastguard Worker [B] 4878*7c356e86SAndroid Build Coastguard Worker [C] 4879*7c356e86SAndroid Build Coastguard Worker <A B C> 4880*7c356e86SAndroid Build Coastguard Worker =b3zna 4881*7c356e86SAndroid Build Coastguard Worker [A] 4882*7c356e86SAndroid Build Coastguard Worker [B] 4883*7c356e86SAndroid Build Coastguard Worker [] 4884*7c356e86SAndroid Build Coastguard Worker [] 4885*7c356e86SAndroid Build Coastguard Worker [C] 4886*7c356e86SAndroid Build Coastguard Worker <A B C> 4887*7c356e86SAndroid Build Coastguard Worker =b4zqa 4888*7c356e86SAndroid Build Coastguard Worker [A] 4889*7c356e86SAndroid Build Coastguard Worker [B] 4890*7c356e86SAndroid Build Coastguard Worker [] 4891*7c356e86SAndroid Build Coastguard Worker [] 4892*7c356e86SAndroid Build Coastguard Worker [C] 4893*7c356e86SAndroid Build Coastguard Worker <A,B,,,C> 4894*7c356e86SAndroid Build Coastguard Worker =b5ins 4895*7c356e86SAndroid Build Coastguard Worker [A,B,,,C] 4896*7c356e86SAndroid Build Coastguard Worker <A,B,,,C> 4897*7c356e86SAndroid Build Coastguard Worker =b6iqs 4898*7c356e86SAndroid Build Coastguard Worker [A] 4899*7c356e86SAndroid Build Coastguard Worker [B] 4900*7c356e86SAndroid Build Coastguard Worker [] 4901*7c356e86SAndroid Build Coastguard Worker [] 4902*7c356e86SAndroid Build Coastguard Worker [C] 4903*7c356e86SAndroid Build Coastguard Worker <A B C> 4904*7c356e86SAndroid Build Coastguard Worker =b7ina 4905*7c356e86SAndroid Build Coastguard Worker [A] 4906*7c356e86SAndroid Build Coastguard Worker [B] 4907*7c356e86SAndroid Build Coastguard Worker [] 4908*7c356e86SAndroid Build Coastguard Worker [] 4909*7c356e86SAndroid Build Coastguard Worker [C] 4910*7c356e86SAndroid Build Coastguard Worker <A B C> 4911*7c356e86SAndroid Build Coastguard Worker =b8iqa 4912*7c356e86SAndroid Build Coastguard Worker--- 4913*7c356e86SAndroid Build Coastguard Workername: IFS-subst-6 4914*7c356e86SAndroid Build Coastguard Workerdescription: 4915*7c356e86SAndroid Build Coastguard Worker Regression wrt. vector expansion in trim 4916*7c356e86SAndroid Build Coastguard Workerstdin: 4917*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4918*7c356e86SAndroid Build Coastguard Worker IFS= 4919*7c356e86SAndroid Build Coastguard Worker x=abc 4920*7c356e86SAndroid Build Coastguard Worker set -- a b 4921*7c356e86SAndroid Build Coastguard Worker showargs ${x#$*} 4922*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4923*7c356e86SAndroid Build Coastguard Worker <c> . 4924*7c356e86SAndroid Build Coastguard Worker--- 4925*7c356e86SAndroid Build Coastguard Workername: IFS-subst-7 4926*7c356e86SAndroid Build Coastguard Workerdescription: 4927*7c356e86SAndroid Build Coastguard Worker ksh93 bug wrt. vector expansion in trim 4928*7c356e86SAndroid Build Coastguard Workerstdin: 4929*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4930*7c356e86SAndroid Build Coastguard Worker IFS="*" 4931*7c356e86SAndroid Build Coastguard Worker a=abcd 4932*7c356e86SAndroid Build Coastguard Worker set -- '' c 4933*7c356e86SAndroid Build Coastguard Worker showargs "$*" ${a##"$*"} 4934*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4935*7c356e86SAndroid Build Coastguard Worker <*c> <abcd> . 4936*7c356e86SAndroid Build Coastguard Worker--- 4937*7c356e86SAndroid Build Coastguard Workername: IFS-subst-8 4938*7c356e86SAndroid Build Coastguard Workerdescription: 4939*7c356e86SAndroid Build Coastguard Worker http://austingroupbugs.net/view.php?id=221 4940*7c356e86SAndroid Build Coastguard Workerstdin: 4941*7c356e86SAndroid Build Coastguard Worker n() { echo "$#"; }; n "${foo-$@}" 4942*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4943*7c356e86SAndroid Build Coastguard Worker 1 4944*7c356e86SAndroid Build Coastguard Worker--- 4945*7c356e86SAndroid Build Coastguard Workername: IFS-subst-9 4946*7c356e86SAndroid Build Coastguard Workerdescription: 4947*7c356e86SAndroid Build Coastguard Worker Scalar context for $*/$@ in [[ and case 4948*7c356e86SAndroid Build Coastguard Workerstdin: 4949*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'IFS=; set a b; [[ $* = "$1$2" ]]; echo 1 $?' sh a b 4950*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'IFS=; [[ $* = ab ]]; echo 2 "$?"' sh a b 4951*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'IFS=; [[ "$*" = ab ]]; echo 3 "$?"' sh a b 4952*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'IFS=; [[ $* = a ]]; echo 4 "$?"' sh a b 4953*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'IFS=; [[ "$*" = a ]]; echo 5 "$?"' sh a b 4954*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'IFS=; [[ "$@" = a ]]; echo 6 "$?"' sh a b 4955*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'IFS=; case "$@" in a) echo 7 a;; ab) echo 7 b;; a\ b) echo 7 ok;; esac' sh a b 4956*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'IFS=; case $* in a) echo 8 a;; ab) echo 8 ok;; esac' sh a b 4957*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'pfsp() { for s_arg in "$@"; do print -nr -- "<$s_arg> "; done; print .; }; IFS=; star=$* at="$@"; pfsp 9 "$star" "$at"' sh a b 4958*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4959*7c356e86SAndroid Build Coastguard Worker 1 0 4960*7c356e86SAndroid Build Coastguard Worker 2 0 4961*7c356e86SAndroid Build Coastguard Worker 3 0 4962*7c356e86SAndroid Build Coastguard Worker 4 1 4963*7c356e86SAndroid Build Coastguard Worker 5 1 4964*7c356e86SAndroid Build Coastguard Worker 6 1 4965*7c356e86SAndroid Build Coastguard Worker 7 ok 4966*7c356e86SAndroid Build Coastguard Worker 8 ok 4967*7c356e86SAndroid Build Coastguard Worker <9> <ab> <a b> . 4968*7c356e86SAndroid Build Coastguard Worker--- 4969*7c356e86SAndroid Build Coastguard Workername: IFS-subst-10 4970*7c356e86SAndroid Build Coastguard Workerdescription: 4971*7c356e86SAndroid Build Coastguard Worker Scalar context in ${var=$subst} 4972*7c356e86SAndroid Build Coastguard Workerstdin: 4973*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4974*7c356e86SAndroid Build Coastguard Worker set -- one "two three" four 4975*7c356e86SAndroid Build Coastguard Worker unset -v var 4976*7c356e86SAndroid Build Coastguard Worker save_IFS=$IFS 4977*7c356e86SAndroid Build Coastguard Worker IFS= 4978*7c356e86SAndroid Build Coastguard Worker set -- ${var=$*} 4979*7c356e86SAndroid Build Coastguard Worker IFS=$save_IFS 4980*7c356e86SAndroid Build Coastguard Worker echo "var=$var" 4981*7c356e86SAndroid Build Coastguard Worker showargs "$@" 4982*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4983*7c356e86SAndroid Build Coastguard Worker var=onetwo threefour 4984*7c356e86SAndroid Build Coastguard Worker <onetwo threefour> . 4985*7c356e86SAndroid Build Coastguard Worker--- 4986*7c356e86SAndroid Build Coastguard Workername: IFS-subst-11 4987*7c356e86SAndroid Build Coastguard Workerdescription: 4988*7c356e86SAndroid Build Coastguard Worker Check leading non-whitespace after trim makes only one field 4989*7c356e86SAndroid Build Coastguard Workerstdin: 4990*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 4991*7c356e86SAndroid Build Coastguard Worker v="foo!one!two!three" 4992*7c356e86SAndroid Build Coastguard Worker IFS="!" 4993*7c356e86SAndroid Build Coastguard Worker showargs x ${v:3} y 4994*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 4995*7c356e86SAndroid Build Coastguard Worker <x> <> <one> <two> <three> <y> . 4996*7c356e86SAndroid Build Coastguard Worker--- 4997*7c356e86SAndroid Build Coastguard Workername: IFS-arith-1 4998*7c356e86SAndroid Build Coastguard Workerdescription: 4999*7c356e86SAndroid Build Coastguard Worker http://austingroupbugs.net/view.php?id=832 5000*7c356e86SAndroid Build Coastguard Workerstdin: 5001*7c356e86SAndroid Build Coastguard Worker ${ZSH_VERSION+false} || emulate sh 5002*7c356e86SAndroid Build Coastguard Worker ${BASH_VERSION+set -o posix} 5003*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 5004*7c356e86SAndroid Build Coastguard Worker IFS=0 5005*7c356e86SAndroid Build Coastguard Worker showargs $((1230456)) 5006*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5007*7c356e86SAndroid Build Coastguard Worker <123> <456> . 5008*7c356e86SAndroid Build Coastguard Worker--- 5009*7c356e86SAndroid Build Coastguard Workername: integer-base-err-1 5010*7c356e86SAndroid Build Coastguard Workerdescription: 5011*7c356e86SAndroid Build Coastguard Worker Can't have 0 base (causes shell to exit) 5012*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 5013*7c356e86SAndroid Build Coastguard Workerstdin: 5014*7c356e86SAndroid Build Coastguard Worker typeset -i i 5015*7c356e86SAndroid Build Coastguard Worker i=3 5016*7c356e86SAndroid Build Coastguard Worker i=0#4 5017*7c356e86SAndroid Build Coastguard Worker echo $i 5018*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 5019*7c356e86SAndroid Build Coastguard Worker /^.*:.*0#4.*\n$/ 5020*7c356e86SAndroid Build Coastguard Worker--- 5021*7c356e86SAndroid Build Coastguard Workername: integer-base-err-2 5022*7c356e86SAndroid Build Coastguard Workerdescription: 5023*7c356e86SAndroid Build Coastguard Worker Can't have multiple bases in a 'constant' (causes shell to exit) 5024*7c356e86SAndroid Build Coastguard Worker (ksh88 fails this test) 5025*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 5026*7c356e86SAndroid Build Coastguard Workerstdin: 5027*7c356e86SAndroid Build Coastguard Worker typeset -i i 5028*7c356e86SAndroid Build Coastguard Worker i=3 5029*7c356e86SAndroid Build Coastguard Worker i=2#110#11 5030*7c356e86SAndroid Build Coastguard Worker echo $i 5031*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 5032*7c356e86SAndroid Build Coastguard Worker /^.*:.*2#110#11.*\n$/ 5033*7c356e86SAndroid Build Coastguard Worker--- 5034*7c356e86SAndroid Build Coastguard Workername: integer-base-err-3 5035*7c356e86SAndroid Build Coastguard Workerdescription: 5036*7c356e86SAndroid Build Coastguard Worker Syntax errors in expressions and effects on bases 5037*7c356e86SAndroid Build Coastguard Worker (interactive so errors don't cause exits) 5038*7c356e86SAndroid Build Coastguard Worker (ksh88 fails this test - shell exits, even with -i) 5039*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 5040*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 5041*7c356e86SAndroid Build Coastguard Workerstdin: 5042*7c356e86SAndroid Build Coastguard Worker PS1= # minimise prompt hassles 5043*7c356e86SAndroid Build Coastguard Worker typeset -i4 a=10 5044*7c356e86SAndroid Build Coastguard Worker typeset -i a=2+ 5045*7c356e86SAndroid Build Coastguard Worker echo $a 5046*7c356e86SAndroid Build Coastguard Worker typeset -i4 a=10 5047*7c356e86SAndroid Build Coastguard Worker typeset -i2 a=2+ 5048*7c356e86SAndroid Build Coastguard Worker echo $a 5049*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 5050*7c356e86SAndroid Build Coastguard Worker /^([#\$] )?.*:.*2+.*\n.*:.*2+.*\n$/ 5051*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5052*7c356e86SAndroid Build Coastguard Worker 4#22 5053*7c356e86SAndroid Build Coastguard Worker 4#22 5054*7c356e86SAndroid Build Coastguard Worker--- 5055*7c356e86SAndroid Build Coastguard Workername: integer-base-err-4 5056*7c356e86SAndroid Build Coastguard Workerdescription: 5057*7c356e86SAndroid Build Coastguard Worker Are invalid digits (according to base) errors? 5058*7c356e86SAndroid Build Coastguard Worker (ksh93 fails this test) 5059*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 5060*7c356e86SAndroid Build Coastguard Workerstdin: 5061*7c356e86SAndroid Build Coastguard Worker typeset -i i; 5062*7c356e86SAndroid Build Coastguard Worker i=3#4 5063*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 5064*7c356e86SAndroid Build Coastguard Worker /^([#\$] )?.*:.*3#4.*\n$/ 5065*7c356e86SAndroid Build Coastguard Worker--- 5066*7c356e86SAndroid Build Coastguard Workername: integer-base-1 5067*7c356e86SAndroid Build Coastguard Workerdescription: 5068*7c356e86SAndroid Build Coastguard Worker Missing number after base is treated as 0. 5069*7c356e86SAndroid Build Coastguard Workerstdin: 5070*7c356e86SAndroid Build Coastguard Worker typeset -i i 5071*7c356e86SAndroid Build Coastguard Worker i=3 5072*7c356e86SAndroid Build Coastguard Worker i=2# 5073*7c356e86SAndroid Build Coastguard Worker echo $i 5074*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5075*7c356e86SAndroid Build Coastguard Worker 0 5076*7c356e86SAndroid Build Coastguard Worker--- 5077*7c356e86SAndroid Build Coastguard Workername: integer-base-2 5078*7c356e86SAndroid Build Coastguard Workerdescription: 5079*7c356e86SAndroid Build Coastguard Worker Check 'stickyness' of base in various situations 5080*7c356e86SAndroid Build Coastguard Workerstdin: 5081*7c356e86SAndroid Build Coastguard Worker typeset -i i=8 5082*7c356e86SAndroid Build Coastguard Worker echo $i 5083*7c356e86SAndroid Build Coastguard Worker echo ---------- A 5084*7c356e86SAndroid Build Coastguard Worker typeset -i4 j=8 5085*7c356e86SAndroid Build Coastguard Worker echo $j 5086*7c356e86SAndroid Build Coastguard Worker echo ---------- B 5087*7c356e86SAndroid Build Coastguard Worker typeset -i k=8 5088*7c356e86SAndroid Build Coastguard Worker typeset -i4 k=8 5089*7c356e86SAndroid Build Coastguard Worker echo $k 5090*7c356e86SAndroid Build Coastguard Worker echo ---------- C 5091*7c356e86SAndroid Build Coastguard Worker typeset -i4 l 5092*7c356e86SAndroid Build Coastguard Worker l=3#10 5093*7c356e86SAndroid Build Coastguard Worker echo $l 5094*7c356e86SAndroid Build Coastguard Worker echo ---------- D 5095*7c356e86SAndroid Build Coastguard Worker typeset -i m 5096*7c356e86SAndroid Build Coastguard Worker m=3#10 5097*7c356e86SAndroid Build Coastguard Worker echo $m 5098*7c356e86SAndroid Build Coastguard Worker echo ---------- E 5099*7c356e86SAndroid Build Coastguard Worker n=2#11 5100*7c356e86SAndroid Build Coastguard Worker typeset -i n 5101*7c356e86SAndroid Build Coastguard Worker echo $n 5102*7c356e86SAndroid Build Coastguard Worker n=10 5103*7c356e86SAndroid Build Coastguard Worker echo $n 5104*7c356e86SAndroid Build Coastguard Worker echo ---------- F 5105*7c356e86SAndroid Build Coastguard Worker typeset -i8 o=12 5106*7c356e86SAndroid Build Coastguard Worker typeset -i4 o 5107*7c356e86SAndroid Build Coastguard Worker echo $o 5108*7c356e86SAndroid Build Coastguard Worker echo ---------- G 5109*7c356e86SAndroid Build Coastguard Worker typeset -i p 5110*7c356e86SAndroid Build Coastguard Worker let p=8#12 5111*7c356e86SAndroid Build Coastguard Worker echo $p 5112*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5113*7c356e86SAndroid Build Coastguard Worker 8 5114*7c356e86SAndroid Build Coastguard Worker ---------- A 5115*7c356e86SAndroid Build Coastguard Worker 4#20 5116*7c356e86SAndroid Build Coastguard Worker ---------- B 5117*7c356e86SAndroid Build Coastguard Worker 4#20 5118*7c356e86SAndroid Build Coastguard Worker ---------- C 5119*7c356e86SAndroid Build Coastguard Worker 4#3 5120*7c356e86SAndroid Build Coastguard Worker ---------- D 5121*7c356e86SAndroid Build Coastguard Worker 3#10 5122*7c356e86SAndroid Build Coastguard Worker ---------- E 5123*7c356e86SAndroid Build Coastguard Worker 2#11 5124*7c356e86SAndroid Build Coastguard Worker 2#1010 5125*7c356e86SAndroid Build Coastguard Worker ---------- F 5126*7c356e86SAndroid Build Coastguard Worker 4#30 5127*7c356e86SAndroid Build Coastguard Worker ---------- G 5128*7c356e86SAndroid Build Coastguard Worker 8#12 5129*7c356e86SAndroid Build Coastguard Worker--- 5130*7c356e86SAndroid Build Coastguard Workername: integer-base-3 5131*7c356e86SAndroid Build Coastguard Workerdescription: 5132*7c356e86SAndroid Build Coastguard Worker More base parsing (hmm doesn't test much..) 5133*7c356e86SAndroid Build Coastguard Workerstdin: 5134*7c356e86SAndroid Build Coastguard Worker typeset -i aa 5135*7c356e86SAndroid Build Coastguard Worker aa=1+12#10+2 5136*7c356e86SAndroid Build Coastguard Worker echo $aa 5137*7c356e86SAndroid Build Coastguard Worker typeset -i bb 5138*7c356e86SAndroid Build Coastguard Worker bb=1+$aa 5139*7c356e86SAndroid Build Coastguard Worker echo $bb 5140*7c356e86SAndroid Build Coastguard Worker typeset -i bb 5141*7c356e86SAndroid Build Coastguard Worker bb=$aa 5142*7c356e86SAndroid Build Coastguard Worker echo $bb 5143*7c356e86SAndroid Build Coastguard Worker typeset -i cc 5144*7c356e86SAndroid Build Coastguard Worker cc=$aa 5145*7c356e86SAndroid Build Coastguard Worker echo $cc 5146*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5147*7c356e86SAndroid Build Coastguard Worker 15 5148*7c356e86SAndroid Build Coastguard Worker 16 5149*7c356e86SAndroid Build Coastguard Worker 15 5150*7c356e86SAndroid Build Coastguard Worker 15 5151*7c356e86SAndroid Build Coastguard Worker--- 5152*7c356e86SAndroid Build Coastguard Workername: integer-base-4 5153*7c356e86SAndroid Build Coastguard Workerdescription: 5154*7c356e86SAndroid Build Coastguard Worker Check that things not declared as integers are not made integers, 5155*7c356e86SAndroid Build Coastguard Worker also, check if base is not reset by -i with no arguments. 5156*7c356e86SAndroid Build Coastguard Worker (ksh93 fails - prints 10#20 - go figure) 5157*7c356e86SAndroid Build Coastguard Workerstdin: 5158*7c356e86SAndroid Build Coastguard Worker xx=20 5159*7c356e86SAndroid Build Coastguard Worker let xx=10 5160*7c356e86SAndroid Build Coastguard Worker typeset -i | grep '^xx=' 5161*7c356e86SAndroid Build Coastguard Worker typeset -i4 a=10 5162*7c356e86SAndroid Build Coastguard Worker typeset -i a=20 5163*7c356e86SAndroid Build Coastguard Worker echo $a 5164*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5165*7c356e86SAndroid Build Coastguard Worker 4#110 5166*7c356e86SAndroid Build Coastguard Worker--- 5167*7c356e86SAndroid Build Coastguard Workername: integer-base-5 5168*7c356e86SAndroid Build Coastguard Workerdescription: 5169*7c356e86SAndroid Build Coastguard Worker More base stuff 5170*7c356e86SAndroid Build Coastguard Workerstdin: 5171*7c356e86SAndroid Build Coastguard Worker typeset -i4 a=3#10 5172*7c356e86SAndroid Build Coastguard Worker echo $a 5173*7c356e86SAndroid Build Coastguard Worker echo -- 5174*7c356e86SAndroid Build Coastguard Worker typeset -i j=3 5175*7c356e86SAndroid Build Coastguard Worker j='~3' 5176*7c356e86SAndroid Build Coastguard Worker echo $j 5177*7c356e86SAndroid Build Coastguard Worker echo -- 5178*7c356e86SAndroid Build Coastguard Worker typeset -i k=1 5179*7c356e86SAndroid Build Coastguard Worker x[k=k+1]=3 5180*7c356e86SAndroid Build Coastguard Worker echo $k 5181*7c356e86SAndroid Build Coastguard Worker echo -- 5182*7c356e86SAndroid Build Coastguard Worker typeset -i l 5183*7c356e86SAndroid Build Coastguard Worker for l in 1 2+3 4; do echo $l; done 5184*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5185*7c356e86SAndroid Build Coastguard Worker 4#3 5186*7c356e86SAndroid Build Coastguard Worker -- 5187*7c356e86SAndroid Build Coastguard Worker -4 5188*7c356e86SAndroid Build Coastguard Worker -- 5189*7c356e86SAndroid Build Coastguard Worker 2 5190*7c356e86SAndroid Build Coastguard Worker -- 5191*7c356e86SAndroid Build Coastguard Worker 1 5192*7c356e86SAndroid Build Coastguard Worker 5 5193*7c356e86SAndroid Build Coastguard Worker 4 5194*7c356e86SAndroid Build Coastguard Worker--- 5195*7c356e86SAndroid Build Coastguard Workername: integer-base-6 5196*7c356e86SAndroid Build Coastguard Workerdescription: 5197*7c356e86SAndroid Build Coastguard Worker Even more base stuff 5198*7c356e86SAndroid Build Coastguard Worker (ksh93 fails this test - prints 0) 5199*7c356e86SAndroid Build Coastguard Workerstdin: 5200*7c356e86SAndroid Build Coastguard Worker typeset -i7 i 5201*7c356e86SAndroid Build Coastguard Worker i= 5202*7c356e86SAndroid Build Coastguard Worker echo $i 5203*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5204*7c356e86SAndroid Build Coastguard Worker 7#0 5205*7c356e86SAndroid Build Coastguard Worker--- 5206*7c356e86SAndroid Build Coastguard Workername: integer-base-7 5207*7c356e86SAndroid Build Coastguard Workerdescription: 5208*7c356e86SAndroid Build Coastguard Worker Check that non-integer parameters don't get bases assigned 5209*7c356e86SAndroid Build Coastguard Workerstdin: 5210*7c356e86SAndroid Build Coastguard Worker echo $(( zz = 8#100 )) 5211*7c356e86SAndroid Build Coastguard Worker echo $zz 5212*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5213*7c356e86SAndroid Build Coastguard Worker 64 5214*7c356e86SAndroid Build Coastguard Worker 64 5215*7c356e86SAndroid Build Coastguard Worker--- 5216*7c356e86SAndroid Build Coastguard Workername: integer-base-8 5217*7c356e86SAndroid Build Coastguard Workerdescription: 5218*7c356e86SAndroid Build Coastguard Worker Check that base-36 works (full span) 5219*7c356e86SAndroid Build Coastguard Workerstdin: 5220*7c356e86SAndroid Build Coastguard Worker echo 1:$((36#109AZ)). 5221*7c356e86SAndroid Build Coastguard Worker typeset -i36 x=1691675 5222*7c356e86SAndroid Build Coastguard Worker echo 2:$x. 5223*7c356e86SAndroid Build Coastguard Worker typeset -Uui36 x 5224*7c356e86SAndroid Build Coastguard Worker echo 3:$x. 5225*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5226*7c356e86SAndroid Build Coastguard Worker 1:1691675. 5227*7c356e86SAndroid Build Coastguard Worker 2:36#109az. 5228*7c356e86SAndroid Build Coastguard Worker 3:36#109AZ. 5229*7c356e86SAndroid Build Coastguard Worker--- 5230*7c356e86SAndroid Build Coastguard Workername: integer-base-check-flat 5231*7c356e86SAndroid Build Coastguard Workerdescription: 5232*7c356e86SAndroid Build Coastguard Worker Check behaviour does not match POSuX (except if set -o posix), 5233*7c356e86SAndroid Build Coastguard Worker because a not type-safe scripting language has *no* business 5234*7c356e86SAndroid Build Coastguard Worker interpreting the string "010" as octal number eight (dangerous). 5235*7c356e86SAndroid Build Coastguard Workerstdin: 5236*7c356e86SAndroid Build Coastguard Worker echo 1 "$("$__progname" -c 'echo :$((10))/$((010)),$((0x10)):')" . 5237*7c356e86SAndroid Build Coastguard Worker echo 2 "$("$__progname" -o posix -c 'echo :$((10))/$((010)),$((0x10)):')" . 5238*7c356e86SAndroid Build Coastguard Worker echo 3 "$("$__progname" -o sh -c 'echo :$((10))/$((010)),$((0x10)):')" . 5239*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5240*7c356e86SAndroid Build Coastguard Worker 1 :10/10,16: . 5241*7c356e86SAndroid Build Coastguard Worker 2 :10/8,16: . 5242*7c356e86SAndroid Build Coastguard Worker 3 :10/10,16: . 5243*7c356e86SAndroid Build Coastguard Worker--- 5244*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-from-1 5245*7c356e86SAndroid Build Coastguard Workerdescription: 5246*7c356e86SAndroid Build Coastguard Worker Check behaviour for base one 5247*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes 5248*7c356e86SAndroid Build Coastguard Workerstdin: 5249*7c356e86SAndroid Build Coastguard Worker echo 1:$((1#1))0. 5250*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5251*7c356e86SAndroid Build Coastguard Worker 1:490. 5252*7c356e86SAndroid Build Coastguard Worker--- 5253*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-from-1-ebcdic 5254*7c356e86SAndroid Build Coastguard Workerdescription: 5255*7c356e86SAndroid Build Coastguard Worker Check behaviour for base one 5256*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no 5257*7c356e86SAndroid Build Coastguard Workerstdin: 5258*7c356e86SAndroid Build Coastguard Worker echo 1:$((1#1))0. 5259*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5260*7c356e86SAndroid Build Coastguard Worker 1:2410. 5261*7c356e86SAndroid Build Coastguard Worker--- 5262*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-from-2 5263*7c356e86SAndroid Build Coastguard Workerdescription: 5264*7c356e86SAndroid Build Coastguard Worker Check behaviour for base two to 36, and that 37 degrades to 10 5265*7c356e86SAndroid Build Coastguard Workerstdin: 5266*7c356e86SAndroid Build Coastguard Worker i=1 5267*7c356e86SAndroid Build Coastguard Worker while (( ++i <= 37 )); do 5268*7c356e86SAndroid Build Coastguard Worker eval 'echo '$i':$(('$i'#10)).' 5269*7c356e86SAndroid Build Coastguard Worker done 5270*7c356e86SAndroid Build Coastguard Worker echo 37:$($__progname -c 'echo $((37#10))').$?: 5271*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5272*7c356e86SAndroid Build Coastguard Worker 2:2. 5273*7c356e86SAndroid Build Coastguard Worker 3:3. 5274*7c356e86SAndroid Build Coastguard Worker 4:4. 5275*7c356e86SAndroid Build Coastguard Worker 5:5. 5276*7c356e86SAndroid Build Coastguard Worker 6:6. 5277*7c356e86SAndroid Build Coastguard Worker 7:7. 5278*7c356e86SAndroid Build Coastguard Worker 8:8. 5279*7c356e86SAndroid Build Coastguard Worker 9:9. 5280*7c356e86SAndroid Build Coastguard Worker 10:10. 5281*7c356e86SAndroid Build Coastguard Worker 11:11. 5282*7c356e86SAndroid Build Coastguard Worker 12:12. 5283*7c356e86SAndroid Build Coastguard Worker 13:13. 5284*7c356e86SAndroid Build Coastguard Worker 14:14. 5285*7c356e86SAndroid Build Coastguard Worker 15:15. 5286*7c356e86SAndroid Build Coastguard Worker 16:16. 5287*7c356e86SAndroid Build Coastguard Worker 17:17. 5288*7c356e86SAndroid Build Coastguard Worker 18:18. 5289*7c356e86SAndroid Build Coastguard Worker 19:19. 5290*7c356e86SAndroid Build Coastguard Worker 20:20. 5291*7c356e86SAndroid Build Coastguard Worker 21:21. 5292*7c356e86SAndroid Build Coastguard Worker 22:22. 5293*7c356e86SAndroid Build Coastguard Worker 23:23. 5294*7c356e86SAndroid Build Coastguard Worker 24:24. 5295*7c356e86SAndroid Build Coastguard Worker 25:25. 5296*7c356e86SAndroid Build Coastguard Worker 26:26. 5297*7c356e86SAndroid Build Coastguard Worker 27:27. 5298*7c356e86SAndroid Build Coastguard Worker 28:28. 5299*7c356e86SAndroid Build Coastguard Worker 29:29. 5300*7c356e86SAndroid Build Coastguard Worker 30:30. 5301*7c356e86SAndroid Build Coastguard Worker 31:31. 5302*7c356e86SAndroid Build Coastguard Worker 32:32. 5303*7c356e86SAndroid Build Coastguard Worker 33:33. 5304*7c356e86SAndroid Build Coastguard Worker 34:34. 5305*7c356e86SAndroid Build Coastguard Worker 35:35. 5306*7c356e86SAndroid Build Coastguard Worker 36:36. 5307*7c356e86SAndroid Build Coastguard Worker 37:10. 5308*7c356e86SAndroid Build Coastguard Worker 37:10.0: 5309*7c356e86SAndroid Build Coastguard Worker--- 5310*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-to-1 5311*7c356e86SAndroid Build Coastguard Workerdescription: 5312*7c356e86SAndroid Build Coastguard Worker Check behaviour for base one 5313*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes 5314*7c356e86SAndroid Build Coastguard Workerstdin: 5315*7c356e86SAndroid Build Coastguard Worker i=1 5316*7c356e86SAndroid Build Coastguard Worker typeset -Uui$i x=0x40 5317*7c356e86SAndroid Build Coastguard Worker eval "typeset -i10 y=$x" 5318*7c356e86SAndroid Build Coastguard Worker print $i:$x.$y. 5319*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5320*7c356e86SAndroid Build Coastguard Worker 1:1#@.64. 5321*7c356e86SAndroid Build Coastguard Worker--- 5322*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-to-1-ebcdic 5323*7c356e86SAndroid Build Coastguard Workerdescription: 5324*7c356e86SAndroid Build Coastguard Worker Check behaviour for base one 5325*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no 5326*7c356e86SAndroid Build Coastguard Workerstdin: 5327*7c356e86SAndroid Build Coastguard Worker i=1 5328*7c356e86SAndroid Build Coastguard Worker typeset -Uui$i x=0x7C 5329*7c356e86SAndroid Build Coastguard Worker eval "typeset -i10 y=$x" 5330*7c356e86SAndroid Build Coastguard Worker print $i:$x.$y. 5331*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5332*7c356e86SAndroid Build Coastguard Worker 1:1#@.124. 5333*7c356e86SAndroid Build Coastguard Worker--- 5334*7c356e86SAndroid Build Coastguard Workername: integer-base-check-numeric-to-2 5335*7c356e86SAndroid Build Coastguard Workerdescription: 5336*7c356e86SAndroid Build Coastguard Worker Check behaviour for base two to 36, and that 37 degrades to 10 5337*7c356e86SAndroid Build Coastguard Workerstdin: 5338*7c356e86SAndroid Build Coastguard Worker i=1 5339*7c356e86SAndroid Build Coastguard Worker while (( ++i <= 37 )); do 5340*7c356e86SAndroid Build Coastguard Worker typeset -Uui$i x=0x40 5341*7c356e86SAndroid Build Coastguard Worker eval "typeset -i10 y=$x" 5342*7c356e86SAndroid Build Coastguard Worker print $i:$x.$y. 5343*7c356e86SAndroid Build Coastguard Worker done 5344*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5345*7c356e86SAndroid Build Coastguard Worker 2:2#1000000.64. 5346*7c356e86SAndroid Build Coastguard Worker 3:3#2101.64. 5347*7c356e86SAndroid Build Coastguard Worker 4:4#1000.64. 5348*7c356e86SAndroid Build Coastguard Worker 5:5#224.64. 5349*7c356e86SAndroid Build Coastguard Worker 6:6#144.64. 5350*7c356e86SAndroid Build Coastguard Worker 7:7#121.64. 5351*7c356e86SAndroid Build Coastguard Worker 8:8#100.64. 5352*7c356e86SAndroid Build Coastguard Worker 9:9#71.64. 5353*7c356e86SAndroid Build Coastguard Worker 10:64.64. 5354*7c356e86SAndroid Build Coastguard Worker 11:11#59.64. 5355*7c356e86SAndroid Build Coastguard Worker 12:12#54.64. 5356*7c356e86SAndroid Build Coastguard Worker 13:13#4C.64. 5357*7c356e86SAndroid Build Coastguard Worker 14:14#48.64. 5358*7c356e86SAndroid Build Coastguard Worker 15:15#44.64. 5359*7c356e86SAndroid Build Coastguard Worker 16:16#40.64. 5360*7c356e86SAndroid Build Coastguard Worker 17:17#3D.64. 5361*7c356e86SAndroid Build Coastguard Worker 18:18#3A.64. 5362*7c356e86SAndroid Build Coastguard Worker 19:19#37.64. 5363*7c356e86SAndroid Build Coastguard Worker 20:20#34.64. 5364*7c356e86SAndroid Build Coastguard Worker 21:21#31.64. 5365*7c356e86SAndroid Build Coastguard Worker 22:22#2K.64. 5366*7c356e86SAndroid Build Coastguard Worker 23:23#2I.64. 5367*7c356e86SAndroid Build Coastguard Worker 24:24#2G.64. 5368*7c356e86SAndroid Build Coastguard Worker 25:25#2E.64. 5369*7c356e86SAndroid Build Coastguard Worker 26:26#2C.64. 5370*7c356e86SAndroid Build Coastguard Worker 27:27#2A.64. 5371*7c356e86SAndroid Build Coastguard Worker 28:28#28.64. 5372*7c356e86SAndroid Build Coastguard Worker 29:29#26.64. 5373*7c356e86SAndroid Build Coastguard Worker 30:30#24.64. 5374*7c356e86SAndroid Build Coastguard Worker 31:31#22.64. 5375*7c356e86SAndroid Build Coastguard Worker 32:32#20.64. 5376*7c356e86SAndroid Build Coastguard Worker 33:33#1V.64. 5377*7c356e86SAndroid Build Coastguard Worker 34:34#1U.64. 5378*7c356e86SAndroid Build Coastguard Worker 35:35#1T.64. 5379*7c356e86SAndroid Build Coastguard Worker 36:36#1S.64. 5380*7c356e86SAndroid Build Coastguard Worker 37:64.64. 5381*7c356e86SAndroid Build Coastguard Worker--- 5382*7c356e86SAndroid Build Coastguard Workername: integer-arithmetic-span 5383*7c356e86SAndroid Build Coastguard Workerdescription: 5384*7c356e86SAndroid Build Coastguard Worker Check wraparound and size that is defined in mksh 5385*7c356e86SAndroid Build Coastguard Workercategory: int:32 5386*7c356e86SAndroid Build Coastguard Workerstdin: 5387*7c356e86SAndroid Build Coastguard Worker echo s:$((2147483647+1)).$(((2147483647*2)+1)).$(((2147483647*2)+2)). 5388*7c356e86SAndroid Build Coastguard Worker echo u:$((#2147483647+1)).$((#(2147483647*2)+1)).$((#(2147483647*2)+2)). 5389*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5390*7c356e86SAndroid Build Coastguard Worker s:-2147483648.-1.0. 5391*7c356e86SAndroid Build Coastguard Worker u:2147483648.4294967295.0. 5392*7c356e86SAndroid Build Coastguard Worker--- 5393*7c356e86SAndroid Build Coastguard Workername: integer-arithmetic-span-64 5394*7c356e86SAndroid Build Coastguard Workerdescription: 5395*7c356e86SAndroid Build Coastguard Worker Check wraparound and size that is defined in mksh 5396*7c356e86SAndroid Build Coastguard Workercategory: int:64 5397*7c356e86SAndroid Build Coastguard Workerstdin: 5398*7c356e86SAndroid Build Coastguard Worker echo s:$((9223372036854775807+1)).$(((9223372036854775807*2)+1)).$(((9223372036854775807*2)+2)). 5399*7c356e86SAndroid Build Coastguard Worker echo u:$((#9223372036854775807+1)).$((#(9223372036854775807*2)+1)).$((#(9223372036854775807*2)+2)). 5400*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5401*7c356e86SAndroid Build Coastguard Worker s:-9223372036854775808.-1.0. 5402*7c356e86SAndroid Build Coastguard Worker u:9223372036854775808.18446744073709551615.0. 5403*7c356e86SAndroid Build Coastguard Worker--- 5404*7c356e86SAndroid Build Coastguard Workername: integer-size-FAIL-to-detect 5405*7c356e86SAndroid Build Coastguard Workerdescription: 5406*7c356e86SAndroid Build Coastguard Worker Notify the user that their ints are not 32 or 64 bit 5407*7c356e86SAndroid Build Coastguard Workercategory: int:u 5408*7c356e86SAndroid Build Coastguard Workerstdin: 5409*7c356e86SAndroid Build Coastguard Worker : 5410*7c356e86SAndroid Build Coastguard Worker--- 5411*7c356e86SAndroid Build Coastguard Workername: lineno-stdin 5412*7c356e86SAndroid Build Coastguard Workerdescription: 5413*7c356e86SAndroid Build Coastguard Worker See if $LINENO is updated and can be modified. 5414*7c356e86SAndroid Build Coastguard Workerstdin: 5415*7c356e86SAndroid Build Coastguard Worker echo A $LINENO 5416*7c356e86SAndroid Build Coastguard Worker echo B $LINENO 5417*7c356e86SAndroid Build Coastguard Worker LINENO=20 5418*7c356e86SAndroid Build Coastguard Worker echo C $LINENO 5419*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5420*7c356e86SAndroid Build Coastguard Worker A 1 5421*7c356e86SAndroid Build Coastguard Worker B 2 5422*7c356e86SAndroid Build Coastguard Worker C 20 5423*7c356e86SAndroid Build Coastguard Worker--- 5424*7c356e86SAndroid Build Coastguard Workername: lineno-inc 5425*7c356e86SAndroid Build Coastguard Workerdescription: 5426*7c356e86SAndroid Build Coastguard Worker See if $LINENO is set for .'d files. 5427*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "dotfile" 5428*7c356e86SAndroid Build Coastguard Worker echo dot A $LINENO 5429*7c356e86SAndroid Build Coastguard Worker echo dot B $LINENO 5430*7c356e86SAndroid Build Coastguard Worker LINENO=20 5431*7c356e86SAndroid Build Coastguard Worker echo dot C $LINENO 5432*7c356e86SAndroid Build Coastguard Workerstdin: 5433*7c356e86SAndroid Build Coastguard Worker echo A $LINENO 5434*7c356e86SAndroid Build Coastguard Worker echo B $LINENO 5435*7c356e86SAndroid Build Coastguard Worker . ./dotfile 5436*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5437*7c356e86SAndroid Build Coastguard Worker A 1 5438*7c356e86SAndroid Build Coastguard Worker B 2 5439*7c356e86SAndroid Build Coastguard Worker dot A 1 5440*7c356e86SAndroid Build Coastguard Worker dot B 2 5441*7c356e86SAndroid Build Coastguard Worker dot C 20 5442*7c356e86SAndroid Build Coastguard Worker--- 5443*7c356e86SAndroid Build Coastguard Workername: lineno-func 5444*7c356e86SAndroid Build Coastguard Workerdescription: 5445*7c356e86SAndroid Build Coastguard Worker See if $LINENO is set for commands in a function. 5446*7c356e86SAndroid Build Coastguard Workerstdin: 5447*7c356e86SAndroid Build Coastguard Worker echo A $LINENO 5448*7c356e86SAndroid Build Coastguard Worker echo B $LINENO 5449*7c356e86SAndroid Build Coastguard Worker bar() { 5450*7c356e86SAndroid Build Coastguard Worker echo func A $LINENO 5451*7c356e86SAndroid Build Coastguard Worker echo func B $LINENO 5452*7c356e86SAndroid Build Coastguard Worker } 5453*7c356e86SAndroid Build Coastguard Worker bar 5454*7c356e86SAndroid Build Coastguard Worker echo C $LINENO 5455*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5456*7c356e86SAndroid Build Coastguard Worker A 1 5457*7c356e86SAndroid Build Coastguard Worker B 2 5458*7c356e86SAndroid Build Coastguard Worker func A 4 5459*7c356e86SAndroid Build Coastguard Worker func B 5 5460*7c356e86SAndroid Build Coastguard Worker C 8 5461*7c356e86SAndroid Build Coastguard Worker--- 5462*7c356e86SAndroid Build Coastguard Workername: lineno-unset 5463*7c356e86SAndroid Build Coastguard Workerdescription: 5464*7c356e86SAndroid Build Coastguard Worker See if unsetting LINENO makes it non-magic. 5465*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "dotfile" 5466*7c356e86SAndroid Build Coastguard Worker echo dot A $LINENO 5467*7c356e86SAndroid Build Coastguard Worker echo dot B $LINENO 5468*7c356e86SAndroid Build Coastguard Workerstdin: 5469*7c356e86SAndroid Build Coastguard Worker unset LINENO 5470*7c356e86SAndroid Build Coastguard Worker echo A $LINENO 5471*7c356e86SAndroid Build Coastguard Worker echo B $LINENO 5472*7c356e86SAndroid Build Coastguard Worker bar() { 5473*7c356e86SAndroid Build Coastguard Worker echo func A $LINENO 5474*7c356e86SAndroid Build Coastguard Worker echo func B $LINENO 5475*7c356e86SAndroid Build Coastguard Worker } 5476*7c356e86SAndroid Build Coastguard Worker bar 5477*7c356e86SAndroid Build Coastguard Worker . ./dotfile 5478*7c356e86SAndroid Build Coastguard Worker echo C $LINENO 5479*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5480*7c356e86SAndroid Build Coastguard Worker A 5481*7c356e86SAndroid Build Coastguard Worker B 5482*7c356e86SAndroid Build Coastguard Worker func A 5483*7c356e86SAndroid Build Coastguard Worker func B 5484*7c356e86SAndroid Build Coastguard Worker dot A 5485*7c356e86SAndroid Build Coastguard Worker dot B 5486*7c356e86SAndroid Build Coastguard Worker C 5487*7c356e86SAndroid Build Coastguard Worker--- 5488*7c356e86SAndroid Build Coastguard Workername: lineno-unset-use 5489*7c356e86SAndroid Build Coastguard Workerdescription: 5490*7c356e86SAndroid Build Coastguard Worker See if unsetting LINENO makes it non-magic even 5491*7c356e86SAndroid Build Coastguard Worker when it is re-used. 5492*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "dotfile" 5493*7c356e86SAndroid Build Coastguard Worker echo dot A $LINENO 5494*7c356e86SAndroid Build Coastguard Worker echo dot B $LINENO 5495*7c356e86SAndroid Build Coastguard Workerstdin: 5496*7c356e86SAndroid Build Coastguard Worker unset LINENO 5497*7c356e86SAndroid Build Coastguard Worker LINENO=3 5498*7c356e86SAndroid Build Coastguard Worker echo A $LINENO 5499*7c356e86SAndroid Build Coastguard Worker echo B $LINENO 5500*7c356e86SAndroid Build Coastguard Worker bar() { 5501*7c356e86SAndroid Build Coastguard Worker echo func A $LINENO 5502*7c356e86SAndroid Build Coastguard Worker echo func B $LINENO 5503*7c356e86SAndroid Build Coastguard Worker } 5504*7c356e86SAndroid Build Coastguard Worker bar 5505*7c356e86SAndroid Build Coastguard Worker . ./dotfile 5506*7c356e86SAndroid Build Coastguard Worker echo C $LINENO 5507*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5508*7c356e86SAndroid Build Coastguard Worker A 3 5509*7c356e86SAndroid Build Coastguard Worker B 3 5510*7c356e86SAndroid Build Coastguard Worker func A 3 5511*7c356e86SAndroid Build Coastguard Worker func B 3 5512*7c356e86SAndroid Build Coastguard Worker dot A 3 5513*7c356e86SAndroid Build Coastguard Worker dot B 3 5514*7c356e86SAndroid Build Coastguard Worker C 3 5515*7c356e86SAndroid Build Coastguard Worker--- 5516*7c356e86SAndroid Build Coastguard Workername: lineno-trap 5517*7c356e86SAndroid Build Coastguard Workerdescription: 5518*7c356e86SAndroid Build Coastguard Worker Check if LINENO is tracked in traps 5519*7c356e86SAndroid Build Coastguard Workerstdin: 5520*7c356e86SAndroid Build Coastguard Worker fail() { 5521*7c356e86SAndroid Build Coastguard Worker echo "line <$1>" 5522*7c356e86SAndroid Build Coastguard Worker exit 1 5523*7c356e86SAndroid Build Coastguard Worker } 5524*7c356e86SAndroid Build Coastguard Worker trap 'fail $LINENO' INT ERR 5525*7c356e86SAndroid Build Coastguard Worker false 5526*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5527*7c356e86SAndroid Build Coastguard Worker line <6> 5528*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 5529*7c356e86SAndroid Build Coastguard Worker--- 5530*7c356e86SAndroid Build Coastguard Workername: lineno-eval-alias 5531*7c356e86SAndroid Build Coastguard Workerdescription: 5532*7c356e86SAndroid Build Coastguard Worker Check if LINENO is trapped in eval and aliases 5533*7c356e86SAndroid Build Coastguard Workerstdin: 5534*7c356e86SAndroid Build Coastguard Worker ${ZSH_VERSION+false} || emulate sh; echo $LINENO 5535*7c356e86SAndroid Build Coastguard Worker echo $LINENO 5536*7c356e86SAndroid Build Coastguard Worker eval ' echo $LINENO 5537*7c356e86SAndroid Build Coastguard Worker echo $LINENO 5538*7c356e86SAndroid Build Coastguard Worker echo $LINENO' 5539*7c356e86SAndroid Build Coastguard Worker echo $LINENO 5540*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5541*7c356e86SAndroid Build Coastguard Worker 1 5542*7c356e86SAndroid Build Coastguard Worker 2 5543*7c356e86SAndroid Build Coastguard Worker 3 5544*7c356e86SAndroid Build Coastguard Worker 3 5545*7c356e86SAndroid Build Coastguard Worker 3 5546*7c356e86SAndroid Build Coastguard Worker 6 5547*7c356e86SAndroid Build Coastguard Worker--- 5548*7c356e86SAndroid Build Coastguard Workername: unknown-trap 5549*7c356e86SAndroid Build Coastguard Workerdescription: 5550*7c356e86SAndroid Build Coastguard Worker Ensure unknown traps are not a syntax error 5551*7c356e86SAndroid Build Coastguard Workerstdin: 5552*7c356e86SAndroid Build Coastguard Worker ( 5553*7c356e86SAndroid Build Coastguard Worker trap "echo trap 1 executed" UNKNOWNSIGNAL || echo "foo" 5554*7c356e86SAndroid Build Coastguard Worker echo =1 5555*7c356e86SAndroid Build Coastguard Worker trap "echo trap 2 executed" UNKNOWNSIGNAL EXIT 999999 FNORD 5556*7c356e86SAndroid Build Coastguard Worker echo = $? 5557*7c356e86SAndroid Build Coastguard Worker ) 2>&1 | sed "s^${__progname%.exe}\.*e*x*e*: <stdin>\[[0-9]*]PROG" 5558*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5559*7c356e86SAndroid Build Coastguard Worker PROG: trap: bad signal 'UNKNOWNSIGNAL' 5560*7c356e86SAndroid Build Coastguard Worker foo 5561*7c356e86SAndroid Build Coastguard Worker =1 5562*7c356e86SAndroid Build Coastguard Worker PROG: trap: bad signal 'UNKNOWNSIGNAL' 5563*7c356e86SAndroid Build Coastguard Worker PROG: trap: bad signal '999999' 5564*7c356e86SAndroid Build Coastguard Worker PROG: trap: bad signal 'FNORD' 5565*7c356e86SAndroid Build Coastguard Worker = 1 5566*7c356e86SAndroid Build Coastguard Worker trap 2 executed 5567*7c356e86SAndroid Build Coastguard Worker--- 5568*7c356e86SAndroid Build Coastguard Workername: read-IFS-1 5569*7c356e86SAndroid Build Coastguard Workerdescription: 5570*7c356e86SAndroid Build Coastguard Worker Simple test, default IFS 5571*7c356e86SAndroid Build Coastguard Workerstdin: 5572*7c356e86SAndroid Build Coastguard Worker echo "A B " > IN 5573*7c356e86SAndroid Build Coastguard Worker unset x y z 5574*7c356e86SAndroid Build Coastguard Worker read x y z < IN 5575*7c356e86SAndroid Build Coastguard Worker echo 1: "x[$x] y[$y] z[$z]" 5576*7c356e86SAndroid Build Coastguard Worker echo 1a: ${z-z not set} 5577*7c356e86SAndroid Build Coastguard Worker read x < IN 5578*7c356e86SAndroid Build Coastguard Worker echo 2: "x[$x]" 5579*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5580*7c356e86SAndroid Build Coastguard Worker 1: x[A] y[B] z[] 5581*7c356e86SAndroid Build Coastguard Worker 1a: 5582*7c356e86SAndroid Build Coastguard Worker 2: x[A B] 5583*7c356e86SAndroid Build Coastguard Worker--- 5584*7c356e86SAndroid Build Coastguard Workername: read-IFS-2 5585*7c356e86SAndroid Build Coastguard Workerdescription: 5586*7c356e86SAndroid Build Coastguard Worker Complex tests, IFS either colon (IFS-NWS) or backslash (tricky) 5587*7c356e86SAndroid Build Coastguard Workerstdin: 5588*7c356e86SAndroid Build Coastguard Worker n=0 5589*7c356e86SAndroid Build Coastguard Worker showargs() { print -nr "$1"; shift; for s_arg in "$@"; do print -nr -- " [$s_arg]"; done; print; } 5590*7c356e86SAndroid Build Coastguard Worker (IFS=\\ a=\<\\\>; showargs 3 $a) 5591*7c356e86SAndroid Build Coastguard Worker (IFS=: b=\<:\>; showargs 4 $b) 5592*7c356e86SAndroid Build Coastguard Worker print -r '<\>' | (IFS=\\ read f g; showargs 5 "$f" "$g") 5593*7c356e86SAndroid Build Coastguard Worker print -r '<\\>' | (IFS=\\ read f g; showargs 6 "$f" "$g") 5594*7c356e86SAndroid Build Coastguard Worker print '<\\\n>' | (IFS=\\ read f g; showargs 7 "$f" "$g") 5595*7c356e86SAndroid Build Coastguard Worker print -r '<\>' | (IFS=\\ read f; showargs 8 "$f") 5596*7c356e86SAndroid Build Coastguard Worker print -r '<\\>' | (IFS=\\ read f; showargs 9 "$f") 5597*7c356e86SAndroid Build Coastguard Worker print '<\\\n>' | (IFS=\\ read f; showargs 10 "$f") 5598*7c356e86SAndroid Build Coastguard Worker print -r '<\>' | (IFS=\\ read -r f g; showargs 11 "$f" "$g") 5599*7c356e86SAndroid Build Coastguard Worker print -r '<\\>' | (IFS=\\ read -r f g; showargs 12 "$f" "$g") 5600*7c356e86SAndroid Build Coastguard Worker print '<\\\n>' | (IFS=\\ read -r f g; showargs 13 "$f" "$g") 5601*7c356e86SAndroid Build Coastguard Worker print -r '<\>' | (IFS=\\ read -r f; showargs 14 "$f") 5602*7c356e86SAndroid Build Coastguard Worker print -r '<\\>' | (IFS=\\ read -r f; showargs 15 "$f") 5603*7c356e86SAndroid Build Coastguard Worker print '<\\\n>' | (IFS=\\ read -r f; showargs 16 "$f") 5604*7c356e86SAndroid Build Coastguard Worker print -r '<:>' | (IFS=: read f g; showargs 17 "$f" "$g") 5605*7c356e86SAndroid Build Coastguard Worker print -r '<::>' | (IFS=: read f g; showargs 18 "$f" "$g") 5606*7c356e86SAndroid Build Coastguard Worker print '<:\n>' | (IFS=: read f g; showargs 19 "$f" "$g") 5607*7c356e86SAndroid Build Coastguard Worker print -r '<:>' | (IFS=: read f; showargs 20 "$f") 5608*7c356e86SAndroid Build Coastguard Worker print -r '<::>' | (IFS=: read f; showargs 21 "$f") 5609*7c356e86SAndroid Build Coastguard Worker print '<:\n>' | (IFS=: read f; showargs 22 "$f") 5610*7c356e86SAndroid Build Coastguard Worker print -r '<:>' | (IFS=: read -r f g; showargs 23 "$f" "$g") 5611*7c356e86SAndroid Build Coastguard Worker print -r '<::>' | (IFS=: read -r f g; showargs 24 "$f" "$g") 5612*7c356e86SAndroid Build Coastguard Worker print '<:\n>' | (IFS=: read -r f g; showargs 25 "$f" "$g") 5613*7c356e86SAndroid Build Coastguard Worker print -r '<:>' | (IFS=: read -r f; showargs 26 "$f") 5614*7c356e86SAndroid Build Coastguard Worker print -r '<::>' | (IFS=: read -r f; showargs 27 "$f") 5615*7c356e86SAndroid Build Coastguard Worker print '<:\n>' | (IFS=: read -r f; showargs 28 "$f") 5616*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5617*7c356e86SAndroid Build Coastguard Worker 3 [<] [>] 5618*7c356e86SAndroid Build Coastguard Worker 4 [<] [>] 5619*7c356e86SAndroid Build Coastguard Worker 5 [<] [>] 5620*7c356e86SAndroid Build Coastguard Worker 6 [<] [>] 5621*7c356e86SAndroid Build Coastguard Worker 7 [<>] [] 5622*7c356e86SAndroid Build Coastguard Worker 8 [<>] 5623*7c356e86SAndroid Build Coastguard Worker 9 [<\>] 5624*7c356e86SAndroid Build Coastguard Worker 10 [<>] 5625*7c356e86SAndroid Build Coastguard Worker 11 [<] [>] 5626*7c356e86SAndroid Build Coastguard Worker 12 [<] [\>] 5627*7c356e86SAndroid Build Coastguard Worker 13 [<] [] 5628*7c356e86SAndroid Build Coastguard Worker 14 [<\>] 5629*7c356e86SAndroid Build Coastguard Worker 15 [<\\>] 5630*7c356e86SAndroid Build Coastguard Worker 16 [<] 5631*7c356e86SAndroid Build Coastguard Worker 17 [<] [>] 5632*7c356e86SAndroid Build Coastguard Worker 18 [<] [:>] 5633*7c356e86SAndroid Build Coastguard Worker 19 [<] [] 5634*7c356e86SAndroid Build Coastguard Worker 20 [<:>] 5635*7c356e86SAndroid Build Coastguard Worker 21 [<::>] 5636*7c356e86SAndroid Build Coastguard Worker 22 [<] 5637*7c356e86SAndroid Build Coastguard Worker 23 [<] [>] 5638*7c356e86SAndroid Build Coastguard Worker 24 [<] [:>] 5639*7c356e86SAndroid Build Coastguard Worker 25 [<] [] 5640*7c356e86SAndroid Build Coastguard Worker 26 [<:>] 5641*7c356e86SAndroid Build Coastguard Worker 27 [<::>] 5642*7c356e86SAndroid Build Coastguard Worker 28 [<] 5643*7c356e86SAndroid Build Coastguard Worker--- 5644*7c356e86SAndroid Build Coastguard Workername: read-ksh-1 5645*7c356e86SAndroid Build Coastguard Workerdescription: 5646*7c356e86SAndroid Build Coastguard Worker If no var specified, REPLY is used 5647*7c356e86SAndroid Build Coastguard Workerstdin: 5648*7c356e86SAndroid Build Coastguard Worker echo "abc" > IN 5649*7c356e86SAndroid Build Coastguard Worker read < IN 5650*7c356e86SAndroid Build Coastguard Worker echo "[$REPLY]"; 5651*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5652*7c356e86SAndroid Build Coastguard Worker [abc] 5653*7c356e86SAndroid Build Coastguard Worker--- 5654*7c356e86SAndroid Build Coastguard Workername: read-regress-1 5655*7c356e86SAndroid Build Coastguard Workerdescription: 5656*7c356e86SAndroid Build Coastguard Worker Check a regression of read 5657*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "foo" 5658*7c356e86SAndroid Build Coastguard Worker foo bar 5659*7c356e86SAndroid Build Coastguard Worker baz 5660*7c356e86SAndroid Build Coastguard Worker blah 5661*7c356e86SAndroid Build Coastguard Workerstdin: 5662*7c356e86SAndroid Build Coastguard Worker while read a b c; do 5663*7c356e86SAndroid Build Coastguard Worker read d 5664*7c356e86SAndroid Build Coastguard Worker break 5665*7c356e86SAndroid Build Coastguard Worker done <foo 5666*7c356e86SAndroid Build Coastguard Worker echo "<$a|$b|$c><$d>" 5667*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5668*7c356e86SAndroid Build Coastguard Worker <foo|bar|><baz> 5669*7c356e86SAndroid Build Coastguard Worker--- 5670*7c356e86SAndroid Build Coastguard Workername: read-delim-1 5671*7c356e86SAndroid Build Coastguard Workerdescription: 5672*7c356e86SAndroid Build Coastguard Worker Check read with delimiters 5673*7c356e86SAndroid Build Coastguard Workerstdin: 5674*7c356e86SAndroid Build Coastguard Worker emit() { 5675*7c356e86SAndroid Build Coastguard Worker print -n 'foo bar\tbaz\nblah \0blub\tblech\nmyok meck \0' 5676*7c356e86SAndroid Build Coastguard Worker } 5677*7c356e86SAndroid Build Coastguard Worker emit | while IFS= read -d "" foo; do print -r -- "<$foo>"; done 5678*7c356e86SAndroid Build Coastguard Worker emit | while read -d "" foo; do print -r -- "<$foo>"; done 5679*7c356e86SAndroid Build Coastguard Worker emit | while read -d "eh?" foo; do print -r -- "<$foo>"; done 5680*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5681*7c356e86SAndroid Build Coastguard Worker <foo bar baz 5682*7c356e86SAndroid Build Coastguard Worker blah > 5683*7c356e86SAndroid Build Coastguard Worker <blub blech 5684*7c356e86SAndroid Build Coastguard Worker myok meck > 5685*7c356e86SAndroid Build Coastguard Worker <foo bar baz 5686*7c356e86SAndroid Build Coastguard Worker blah> 5687*7c356e86SAndroid Build Coastguard Worker <blub blech 5688*7c356e86SAndroid Build Coastguard Worker myok meck> 5689*7c356e86SAndroid Build Coastguard Worker <foo bar baz 5690*7c356e86SAndroid Build Coastguard Worker blah blub bl> 5691*7c356e86SAndroid Build Coastguard Worker <ch 5692*7c356e86SAndroid Build Coastguard Worker myok m> 5693*7c356e86SAndroid Build Coastguard Worker--- 5694*7c356e86SAndroid Build Coastguard Workername: read-ext-1 5695*7c356e86SAndroid Build Coastguard Workerdescription: 5696*7c356e86SAndroid Build Coastguard Worker Check read with number of bytes specified, and -A 5697*7c356e86SAndroid Build Coastguard Workerstdin: 5698*7c356e86SAndroid Build Coastguard Worker print 'foo\nbar' >x1 5699*7c356e86SAndroid Build Coastguard Worker print -n x >x2 5700*7c356e86SAndroid Build Coastguard Worker print 'foo\\ bar baz' >x3 5701*7c356e86SAndroid Build Coastguard Worker x1a=u; read x1a <x1 5702*7c356e86SAndroid Build Coastguard Worker x1b=u; read -N-1 x1b <x1 5703*7c356e86SAndroid Build Coastguard Worker x2a=u; read x2a <x2; r2a=$? 5704*7c356e86SAndroid Build Coastguard Worker x2b=u; read -N2 x2c <x2; r2b=$? 5705*7c356e86SAndroid Build Coastguard Worker x2c=u; read -n2 x2c <x2; r2c=$? 5706*7c356e86SAndroid Build Coastguard Worker x3a=u; read -A x3a <x3 5707*7c356e86SAndroid Build Coastguard Worker print -r "x1a=<$x1a>" 5708*7c356e86SAndroid Build Coastguard Worker print -r "x1b=<$x1b>" 5709*7c356e86SAndroid Build Coastguard Worker print -r "x2a=$r2a<$x2a>" 5710*7c356e86SAndroid Build Coastguard Worker print -r "x2b=$r2b<$x2b>" 5711*7c356e86SAndroid Build Coastguard Worker print -r "x2c=$r2c<$x2c>" 5712*7c356e86SAndroid Build Coastguard Worker print -r "x3a=<${x3a[0]}|${x3a[1]}|${x3a[2]}>" 5713*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5714*7c356e86SAndroid Build Coastguard Worker x1a=<foo> 5715*7c356e86SAndroid Build Coastguard Worker x1b=<foo 5716*7c356e86SAndroid Build Coastguard Worker bar> 5717*7c356e86SAndroid Build Coastguard Worker x2a=1<x> 5718*7c356e86SAndroid Build Coastguard Worker x2b=1<u> 5719*7c356e86SAndroid Build Coastguard Worker x2c=0<x> 5720*7c356e86SAndroid Build Coastguard Worker x3a=<foo bar|baz|> 5721*7c356e86SAndroid Build Coastguard Worker--- 5722*7c356e86SAndroid Build Coastguard Workername: regression-1 5723*7c356e86SAndroid Build Coastguard Workerdescription: 5724*7c356e86SAndroid Build Coastguard Worker Lex array code had problems with this. 5725*7c356e86SAndroid Build Coastguard Workerstdin: 5726*7c356e86SAndroid Build Coastguard Worker echo foo[ 5727*7c356e86SAndroid Build Coastguard Worker n=bar 5728*7c356e86SAndroid Build Coastguard Worker echo "hi[ $n ]=1" 5729*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5730*7c356e86SAndroid Build Coastguard Worker foo[ 5731*7c356e86SAndroid Build Coastguard Worker hi[ bar ]=1 5732*7c356e86SAndroid Build Coastguard Worker--- 5733*7c356e86SAndroid Build Coastguard Workername: regression-2 5734*7c356e86SAndroid Build Coastguard Workerdescription: 5735*7c356e86SAndroid Build Coastguard Worker When PATH is set before running a command, the new path is 5736*7c356e86SAndroid Build Coastguard Worker not used in doing the path search 5737*7c356e86SAndroid Build Coastguard Worker $ echo echo hi > /tmp/q ; chmod a+rx /tmp/q 5738*7c356e86SAndroid Build Coastguard Worker $ PATH=/tmp q 5739*7c356e86SAndroid Build Coastguard Worker q: not found 5740*7c356e86SAndroid Build Coastguard Worker $ 5741*7c356e86SAndroid Build Coastguard Worker in comexec() the two lines 5742*7c356e86SAndroid Build Coastguard Worker while (*vp != NULL) 5743*7c356e86SAndroid Build Coastguard Worker (void) typeset(*vp++, xxx, 0); 5744*7c356e86SAndroid Build Coastguard Worker need to be moved out of the switch to before findcom() is 5745*7c356e86SAndroid Build Coastguard Worker called - I don't know what this will break. 5746*7c356e86SAndroid Build Coastguard Workerstdin: 5747*7c356e86SAndroid Build Coastguard Worker : "${PWD:-`pwd 2> /dev/null`}" 5748*7c356e86SAndroid Build Coastguard Worker : "${PWD:?"PWD not set - cannot do test"}" 5749*7c356e86SAndroid Build Coastguard Worker mkdir Y 5750*7c356e86SAndroid Build Coastguard Worker cat > Y/xxxscript << EOF 5751*7c356e86SAndroid Build Coastguard Worker #!/bin/sh 5752*7c356e86SAndroid Build Coastguard Worker # Need to restore path so echo can be found (some shells don't have 5753*7c356e86SAndroid Build Coastguard Worker # it as a built-in) 5754*7c356e86SAndroid Build Coastguard Worker PATH=\$OLDPATH 5755*7c356e86SAndroid Build Coastguard Worker echo hi 5756*7c356e86SAndroid Build Coastguard Worker exit 0 5757*7c356e86SAndroid Build Coastguard Worker EOF 5758*7c356e86SAndroid Build Coastguard Worker chmod a+rx Y/xxxscript 5759*7c356e86SAndroid Build Coastguard Worker export OLDPATH="$PATH" 5760*7c356e86SAndroid Build Coastguard Worker PATH=$PWD/Y xxxscript 5761*7c356e86SAndroid Build Coastguard Worker exit $? 5762*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5763*7c356e86SAndroid Build Coastguard Worker hi 5764*7c356e86SAndroid Build Coastguard Worker--- 5765*7c356e86SAndroid Build Coastguard Workername: regression-6 5766*7c356e86SAndroid Build Coastguard Workerdescription: 5767*7c356e86SAndroid Build Coastguard Worker Parsing of $(..) expressions is non-optimal. It is 5768*7c356e86SAndroid Build Coastguard Worker impossible to have any parentheses inside the expression. 5769*7c356e86SAndroid Build Coastguard Worker I.e., 5770*7c356e86SAndroid Build Coastguard Worker $ ksh -c 'echo $(echo \( )' 5771*7c356e86SAndroid Build Coastguard Worker no closing quote 5772*7c356e86SAndroid Build Coastguard Worker $ ksh -c 'echo $(echo "(" )' 5773*7c356e86SAndroid Build Coastguard Worker no closing quote 5774*7c356e86SAndroid Build Coastguard Worker $ 5775*7c356e86SAndroid Build Coastguard Worker The solution is to hack the parsing clode in lex.c, the 5776*7c356e86SAndroid Build Coastguard Worker question is how to hack it: should any parentheses be 5777*7c356e86SAndroid Build Coastguard Worker escaped by a backslash, or should recursive parsing be done 5778*7c356e86SAndroid Build Coastguard Worker (so quotes could also be used to hide hem). The former is 5779*7c356e86SAndroid Build Coastguard Worker easier, the later better... 5780*7c356e86SAndroid Build Coastguard Workerstdin: 5781*7c356e86SAndroid Build Coastguard Worker echo $(echo \( ) 5782*7c356e86SAndroid Build Coastguard Worker echo $(echo "(" ) 5783*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5784*7c356e86SAndroid Build Coastguard Worker ( 5785*7c356e86SAndroid Build Coastguard Worker ( 5786*7c356e86SAndroid Build Coastguard Worker--- 5787*7c356e86SAndroid Build Coastguard Workername: regression-9 5788*7c356e86SAndroid Build Coastguard Workerdescription: 5789*7c356e86SAndroid Build Coastguard Worker Continue in a for loop does not work right: 5790*7c356e86SAndroid Build Coastguard Worker for i in a b c ; do 5791*7c356e86SAndroid Build Coastguard Worker if [ $i = b ] ; then 5792*7c356e86SAndroid Build Coastguard Worker continue 5793*7c356e86SAndroid Build Coastguard Worker fi 5794*7c356e86SAndroid Build Coastguard Worker echo $i 5795*7c356e86SAndroid Build Coastguard Worker done 5796*7c356e86SAndroid Build Coastguard Worker Prints a forever... 5797*7c356e86SAndroid Build Coastguard Workerstdin: 5798*7c356e86SAndroid Build Coastguard Worker first=yes 5799*7c356e86SAndroid Build Coastguard Worker for i in a b c ; do 5800*7c356e86SAndroid Build Coastguard Worker if [ $i = b ] ; then 5801*7c356e86SAndroid Build Coastguard Worker if [ $first = no ] ; then 5802*7c356e86SAndroid Build Coastguard Worker echo 'continue in for loop broken' 5803*7c356e86SAndroid Build Coastguard Worker break # hope break isn't broken too :-) 5804*7c356e86SAndroid Build Coastguard Worker fi 5805*7c356e86SAndroid Build Coastguard Worker first=no 5806*7c356e86SAndroid Build Coastguard Worker continue 5807*7c356e86SAndroid Build Coastguard Worker fi 5808*7c356e86SAndroid Build Coastguard Worker done 5809*7c356e86SAndroid Build Coastguard Worker echo bye 5810*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5811*7c356e86SAndroid Build Coastguard Worker bye 5812*7c356e86SAndroid Build Coastguard Worker--- 5813*7c356e86SAndroid Build Coastguard Workername: regression-10 5814*7c356e86SAndroid Build Coastguard Workerdescription: 5815*7c356e86SAndroid Build Coastguard Worker The following: 5816*7c356e86SAndroid Build Coastguard Worker set -- `false` 5817*7c356e86SAndroid Build Coastguard Worker echo $? 5818*7c356e86SAndroid Build Coastguard Worker should print 0 according to POSIX (dash, bash, ksh93, posh) 5819*7c356e86SAndroid Build Coastguard Worker but not 0 according to the getopt(1) manual page, ksh88, and 5820*7c356e86SAndroid Build Coastguard Worker Bourne sh (such as /bin/sh on Solaris). 5821*7c356e86SAndroid Build Coastguard Worker We honour POSIX except when -o sh is set. 5822*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-no 5823*7c356e86SAndroid Build Coastguard Workerstdin: 5824*7c356e86SAndroid Build Coastguard Worker showf() { 5825*7c356e86SAndroid Build Coastguard Worker [[ -o posix ]]; FPOSIX=$((1-$?)) 5826*7c356e86SAndroid Build Coastguard Worker [[ -o sh ]]; FSH=$((1-$?)) 5827*7c356e86SAndroid Build Coastguard Worker echo -n "FPOSIX=$FPOSIX FSH=$FSH " 5828*7c356e86SAndroid Build Coastguard Worker } 5829*7c356e86SAndroid Build Coastguard Worker set +o posix +o sh 5830*7c356e86SAndroid Build Coastguard Worker showf 5831*7c356e86SAndroid Build Coastguard Worker set -- `false` 5832*7c356e86SAndroid Build Coastguard Worker echo rv=$? 5833*7c356e86SAndroid Build Coastguard Worker set -o sh 5834*7c356e86SAndroid Build Coastguard Worker showf 5835*7c356e86SAndroid Build Coastguard Worker set -- `false` 5836*7c356e86SAndroid Build Coastguard Worker echo rv=$? 5837*7c356e86SAndroid Build Coastguard Worker set -o posix 5838*7c356e86SAndroid Build Coastguard Worker showf 5839*7c356e86SAndroid Build Coastguard Worker set -- `false` 5840*7c356e86SAndroid Build Coastguard Worker echo rv=$? 5841*7c356e86SAndroid Build Coastguard Worker set -o posix -o sh 5842*7c356e86SAndroid Build Coastguard Worker showf 5843*7c356e86SAndroid Build Coastguard Worker set -- `false` 5844*7c356e86SAndroid Build Coastguard Worker echo rv=$? 5845*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5846*7c356e86SAndroid Build Coastguard Worker FPOSIX=0 FSH=0 rv=0 5847*7c356e86SAndroid Build Coastguard Worker FPOSIX=0 FSH=1 rv=1 5848*7c356e86SAndroid Build Coastguard Worker FPOSIX=1 FSH=0 rv=0 5849*7c356e86SAndroid Build Coastguard Worker FPOSIX=1 FSH=1 rv=0 5850*7c356e86SAndroid Build Coastguard Worker--- 5851*7c356e86SAndroid Build Coastguard Workername: regression-10-legacy 5852*7c356e86SAndroid Build Coastguard Workerdescription: 5853*7c356e86SAndroid Build Coastguard Worker The following: 5854*7c356e86SAndroid Build Coastguard Worker set -- `false` 5855*7c356e86SAndroid Build Coastguard Worker echo $? 5856*7c356e86SAndroid Build Coastguard Worker should print 0 according to POSIX (dash, bash, ksh93, posh) 5857*7c356e86SAndroid Build Coastguard Worker but not 0 according to the getopt(1) manual page, ksh88, and 5858*7c356e86SAndroid Build Coastguard Worker Bourne sh (such as /bin/sh on Solaris). 5859*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-yes 5860*7c356e86SAndroid Build Coastguard Workerstdin: 5861*7c356e86SAndroid Build Coastguard Worker showf() { 5862*7c356e86SAndroid Build Coastguard Worker [[ -o posix ]]; FPOSIX=$((1-$?)) 5863*7c356e86SAndroid Build Coastguard Worker [[ -o sh ]]; FSH=$((1-$?)) 5864*7c356e86SAndroid Build Coastguard Worker echo -n "FPOSIX=$FPOSIX FSH=$FSH " 5865*7c356e86SAndroid Build Coastguard Worker } 5866*7c356e86SAndroid Build Coastguard Worker set +o posix +o sh 5867*7c356e86SAndroid Build Coastguard Worker showf 5868*7c356e86SAndroid Build Coastguard Worker set -- `false` 5869*7c356e86SAndroid Build Coastguard Worker echo rv=$? 5870*7c356e86SAndroid Build Coastguard Worker set -o sh 5871*7c356e86SAndroid Build Coastguard Worker showf 5872*7c356e86SAndroid Build Coastguard Worker set -- `false` 5873*7c356e86SAndroid Build Coastguard Worker echo rv=$? 5874*7c356e86SAndroid Build Coastguard Worker set -o posix 5875*7c356e86SAndroid Build Coastguard Worker showf 5876*7c356e86SAndroid Build Coastguard Worker set -- `false` 5877*7c356e86SAndroid Build Coastguard Worker echo rv=$? 5878*7c356e86SAndroid Build Coastguard Worker set -o posix -o sh 5879*7c356e86SAndroid Build Coastguard Worker showf 5880*7c356e86SAndroid Build Coastguard Worker set -- `false` 5881*7c356e86SAndroid Build Coastguard Worker echo rv=$? 5882*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5883*7c356e86SAndroid Build Coastguard Worker FPOSIX=0 FSH=0 rv=1 5884*7c356e86SAndroid Build Coastguard Worker FPOSIX=0 FSH=1 rv=1 5885*7c356e86SAndroid Build Coastguard Worker FPOSIX=1 FSH=0 rv=0 5886*7c356e86SAndroid Build Coastguard Worker FPOSIX=1 FSH=1 rv=0 5887*7c356e86SAndroid Build Coastguard Worker--- 5888*7c356e86SAndroid Build Coastguard Workername: regression-11 5889*7c356e86SAndroid Build Coastguard Workerdescription: 5890*7c356e86SAndroid Build Coastguard Worker The following: 5891*7c356e86SAndroid Build Coastguard Worker x=/foo/bar/blah 5892*7c356e86SAndroid Build Coastguard Worker echo ${x##*/} 5893*7c356e86SAndroid Build Coastguard Worker should echo blah but on some machines echos /foo/bar/blah. 5894*7c356e86SAndroid Build Coastguard Workerstdin: 5895*7c356e86SAndroid Build Coastguard Worker x=/foo/bar/blah 5896*7c356e86SAndroid Build Coastguard Worker echo ${x##*/} 5897*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5898*7c356e86SAndroid Build Coastguard Worker blah 5899*7c356e86SAndroid Build Coastguard Worker--- 5900*7c356e86SAndroid Build Coastguard Workername: regression-12 5901*7c356e86SAndroid Build Coastguard Workerdescription: 5902*7c356e86SAndroid Build Coastguard Worker Both of the following echos produce the same output under sh/ksh.att: 5903*7c356e86SAndroid Build Coastguard Worker #!/bin/sh 5904*7c356e86SAndroid Build Coastguard Worker x="foo bar" 5905*7c356e86SAndroid Build Coastguard Worker echo "`echo \"$x\"`" 5906*7c356e86SAndroid Build Coastguard Worker echo "`echo "$x"`" 5907*7c356e86SAndroid Build Coastguard Worker pdksh produces different output for the former (foo instead of foo\tbar) 5908*7c356e86SAndroid Build Coastguard Workerstdin: 5909*7c356e86SAndroid Build Coastguard Worker x="foo bar" 5910*7c356e86SAndroid Build Coastguard Worker echo "`echo \"$x\"`" 5911*7c356e86SAndroid Build Coastguard Worker echo "`echo "$x"`" 5912*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5913*7c356e86SAndroid Build Coastguard Worker foo bar 5914*7c356e86SAndroid Build Coastguard Worker foo bar 5915*7c356e86SAndroid Build Coastguard Worker--- 5916*7c356e86SAndroid Build Coastguard Workername: regression-13 5917*7c356e86SAndroid Build Coastguard Workerdescription: 5918*7c356e86SAndroid Build Coastguard Worker The following command hangs forever: 5919*7c356e86SAndroid Build Coastguard Worker $ (: ; cat /etc/termcap) | sleep 2 5920*7c356e86SAndroid Build Coastguard Worker This is because the shell forks a shell to run the (..) command 5921*7c356e86SAndroid Build Coastguard Worker and this shell has the pipe open. When the sleep dies, the cat 5922*7c356e86SAndroid Build Coastguard Worker doesn't get a SIGPIPE 'cause a process (ie, the second shell) 5923*7c356e86SAndroid Build Coastguard Worker still has the pipe open. 5924*7c356e86SAndroid Build Coastguard Worker 5925*7c356e86SAndroid Build Coastguard Worker NOTE: this test provokes a bizarre bug in ksh93 (shell starts reading 5926*7c356e86SAndroid Build Coastguard Worker commands from /etc/termcap..) 5927*7c356e86SAndroid Build Coastguard Workertime-limit: 10 5928*7c356e86SAndroid Build Coastguard Workerstdin: 5929*7c356e86SAndroid Build Coastguard Worker echo A line of text that will be duplicated quite a number of times.> t1 5930*7c356e86SAndroid Build Coastguard Worker cat t1 t1 t1 t1 t1 t1 t1 t1 t1 t1 t1 t1 t1 t1 t1 t1 > t2 5931*7c356e86SAndroid Build Coastguard Worker cat t2 t2 t2 t2 t2 t2 t2 t2 t2 t2 t2 t2 t2 t2 t2 t2 > t1 5932*7c356e86SAndroid Build Coastguard Worker cat t1 t1 t1 t1 > t2 5933*7c356e86SAndroid Build Coastguard Worker (: ; cat t2 2>/dev/null) | sleep 1 5934*7c356e86SAndroid Build Coastguard Worker--- 5935*7c356e86SAndroid Build Coastguard Workername: regression-14 5936*7c356e86SAndroid Build Coastguard Workerdescription: 5937*7c356e86SAndroid Build Coastguard Worker The command 5938*7c356e86SAndroid Build Coastguard Worker $ (foobar) 2> /dev/null 5939*7c356e86SAndroid Build Coastguard Worker generates no output under /bin/sh, but pdksh produces the error 5940*7c356e86SAndroid Build Coastguard Worker foobar: not found 5941*7c356e86SAndroid Build Coastguard Worker Also, the command 5942*7c356e86SAndroid Build Coastguard Worker $ foobar 2> /dev/null 5943*7c356e86SAndroid Build Coastguard Worker generates an error under /bin/sh and pdksh, but AT&T ksh88 produces 5944*7c356e86SAndroid Build Coastguard Worker no error (redirected to /dev/null). 5945*7c356e86SAndroid Build Coastguard Workerstdin: 5946*7c356e86SAndroid Build Coastguard Worker (you/should/not/see/this/error/1) 2> /dev/null 5947*7c356e86SAndroid Build Coastguard Worker you/should/not/see/this/error/2 2> /dev/null 5948*7c356e86SAndroid Build Coastguard Worker true 5949*7c356e86SAndroid Build Coastguard Worker--- 5950*7c356e86SAndroid Build Coastguard Workername: regression-15 5951*7c356e86SAndroid Build Coastguard Workerdescription: 5952*7c356e86SAndroid Build Coastguard Worker The command 5953*7c356e86SAndroid Build Coastguard Worker $ whence foobar 5954*7c356e86SAndroid Build Coastguard Worker generates a blank line under pdksh and sets the exit status to 0. 5955*7c356e86SAndroid Build Coastguard Worker AT&T ksh88 generates no output and sets the exit status to 1. Also, 5956*7c356e86SAndroid Build Coastguard Worker the command 5957*7c356e86SAndroid Build Coastguard Worker $ whence foobar cat 5958*7c356e86SAndroid Build Coastguard Worker generates no output under AT&T ksh88 (pdksh generates a blank line 5959*7c356e86SAndroid Build Coastguard Worker and /bin/cat). 5960*7c356e86SAndroid Build Coastguard Workerstdin: 5961*7c356e86SAndroid Build Coastguard Worker whence does/not/exist > /dev/null 5962*7c356e86SAndroid Build Coastguard Worker echo 1: $? 5963*7c356e86SAndroid Build Coastguard Worker echo 2: $(whence does/not/exist | wc -l) 5964*7c356e86SAndroid Build Coastguard Worker echo 3: $(whence does/not/exist cat | wc -l) 5965*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5966*7c356e86SAndroid Build Coastguard Worker 1: 1 5967*7c356e86SAndroid Build Coastguard Worker 2: 0 5968*7c356e86SAndroid Build Coastguard Worker 3: 0 5969*7c356e86SAndroid Build Coastguard Worker--- 5970*7c356e86SAndroid Build Coastguard Workername: regression-16 5971*7c356e86SAndroid Build Coastguard Workerdescription: 5972*7c356e86SAndroid Build Coastguard Worker ${var%%expr} seems to be broken in many places. On the mips 5973*7c356e86SAndroid Build Coastguard Worker the commands 5974*7c356e86SAndroid Build Coastguard Worker $ read line < /etc/passwd 5975*7c356e86SAndroid Build Coastguard Worker $ echo $line 5976*7c356e86SAndroid Build Coastguard Worker root:0:1:... 5977*7c356e86SAndroid Build Coastguard Worker $ echo ${line%%:*} 5978*7c356e86SAndroid Build Coastguard Worker root 5979*7c356e86SAndroid Build Coastguard Worker $ echo $line 5980*7c356e86SAndroid Build Coastguard Worker root 5981*7c356e86SAndroid Build Coastguard Worker $ 5982*7c356e86SAndroid Build Coastguard Worker change the value of line. On sun4s & pas, the echo ${line%%:*} doesn't 5983*7c356e86SAndroid Build Coastguard Worker work. Haven't checked elsewhere... 5984*7c356e86SAndroid Build Coastguard Workerscript: 5985*7c356e86SAndroid Build Coastguard Worker read x 5986*7c356e86SAndroid Build Coastguard Worker y=$x 5987*7c356e86SAndroid Build Coastguard Worker echo ${x%%:*} 5988*7c356e86SAndroid Build Coastguard Worker echo $x 5989*7c356e86SAndroid Build Coastguard Workerstdin: 5990*7c356e86SAndroid Build Coastguard Worker root:asdjhasdasjhs:0:1:Root:/:/bin/sh 5991*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 5992*7c356e86SAndroid Build Coastguard Worker root 5993*7c356e86SAndroid Build Coastguard Worker root:asdjhasdasjhs:0:1:Root:/:/bin/sh 5994*7c356e86SAndroid Build Coastguard Worker--- 5995*7c356e86SAndroid Build Coastguard Workername: regression-17 5996*7c356e86SAndroid Build Coastguard Workerdescription: 5997*7c356e86SAndroid Build Coastguard Worker The command 5998*7c356e86SAndroid Build Coastguard Worker . /foo/bar 5999*7c356e86SAndroid Build Coastguard Worker should set the exit status to non-zero (sh and AT&T ksh88 do). 6000*7c356e86SAndroid Build Coastguard Worker XXX doting a non existent file is a fatal error for a script 6001*7c356e86SAndroid Build Coastguard Workerstdin: 6002*7c356e86SAndroid Build Coastguard Worker . does/not/exist 6003*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 6004*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.?/ 6005*7c356e86SAndroid Build Coastguard Worker--- 6006*7c356e86SAndroid Build Coastguard Workername: regression-19 6007*7c356e86SAndroid Build Coastguard Workerdescription: 6008*7c356e86SAndroid Build Coastguard Worker Both of the following echos should produce the same thing, but don't: 6009*7c356e86SAndroid Build Coastguard Worker $ x=foo/bar 6010*7c356e86SAndroid Build Coastguard Worker $ echo ${x%/*} 6011*7c356e86SAndroid Build Coastguard Worker foo 6012*7c356e86SAndroid Build Coastguard Worker $ echo "${x%/*}" 6013*7c356e86SAndroid Build Coastguard Worker foo/bar 6014*7c356e86SAndroid Build Coastguard Workerstdin: 6015*7c356e86SAndroid Build Coastguard Worker x=foo/bar 6016*7c356e86SAndroid Build Coastguard Worker echo "${x%/*}" 6017*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6018*7c356e86SAndroid Build Coastguard Worker foo 6019*7c356e86SAndroid Build Coastguard Worker--- 6020*7c356e86SAndroid Build Coastguard Workername: regression-21 6021*7c356e86SAndroid Build Coastguard Workerdescription: 6022*7c356e86SAndroid Build Coastguard Worker backslash does not work as expected in case labels: 6023*7c356e86SAndroid Build Coastguard Worker $ x='-x' 6024*7c356e86SAndroid Build Coastguard Worker $ case $x in 6025*7c356e86SAndroid Build Coastguard Worker -\?) echo hi 6026*7c356e86SAndroid Build Coastguard Worker esac 6027*7c356e86SAndroid Build Coastguard Worker hi 6028*7c356e86SAndroid Build Coastguard Worker $ x='-?' 6029*7c356e86SAndroid Build Coastguard Worker $ case $x in 6030*7c356e86SAndroid Build Coastguard Worker -\\?) echo hi 6031*7c356e86SAndroid Build Coastguard Worker esac 6032*7c356e86SAndroid Build Coastguard Worker hi 6033*7c356e86SAndroid Build Coastguard Worker $ 6034*7c356e86SAndroid Build Coastguard Workerstdin: 6035*7c356e86SAndroid Build Coastguard Worker case -x in 6036*7c356e86SAndroid Build Coastguard Worker -\?) echo fail 6037*7c356e86SAndroid Build Coastguard Worker esac 6038*7c356e86SAndroid Build Coastguard Worker--- 6039*7c356e86SAndroid Build Coastguard Workername: regression-22 6040*7c356e86SAndroid Build Coastguard Workerdescription: 6041*7c356e86SAndroid Build Coastguard Worker Quoting backquotes inside backquotes doesn't work: 6042*7c356e86SAndroid Build Coastguard Worker $ echo `echo hi \`echo there\` folks` 6043*7c356e86SAndroid Build Coastguard Worker asks for more info. sh and AT&T ksh88 both echo 6044*7c356e86SAndroid Build Coastguard Worker hi there folks 6045*7c356e86SAndroid Build Coastguard Workerstdin: 6046*7c356e86SAndroid Build Coastguard Worker echo `echo hi \`echo there\` folks` 6047*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6048*7c356e86SAndroid Build Coastguard Worker hi there folks 6049*7c356e86SAndroid Build Coastguard Worker--- 6050*7c356e86SAndroid Build Coastguard Workername: regression-23 6051*7c356e86SAndroid Build Coastguard Workerdescription: 6052*7c356e86SAndroid Build Coastguard Worker )) is not treated `correctly': 6053*7c356e86SAndroid Build Coastguard Worker $ (echo hi ; (echo there ; echo folks)) 6054*7c356e86SAndroid Build Coastguard Worker missing (( 6055*7c356e86SAndroid Build Coastguard Worker $ 6056*7c356e86SAndroid Build Coastguard Worker instead of (as sh and ksh.att) 6057*7c356e86SAndroid Build Coastguard Worker $ (echo hi ; (echo there ; echo folks)) 6058*7c356e86SAndroid Build Coastguard Worker hi 6059*7c356e86SAndroid Build Coastguard Worker there 6060*7c356e86SAndroid Build Coastguard Worker folks 6061*7c356e86SAndroid Build Coastguard Worker $ 6062*7c356e86SAndroid Build Coastguard Workerstdin: 6063*7c356e86SAndroid Build Coastguard Worker ( : ; ( : ; echo hi)) 6064*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6065*7c356e86SAndroid Build Coastguard Worker hi 6066*7c356e86SAndroid Build Coastguard Worker--- 6067*7c356e86SAndroid Build Coastguard Workername: regression-25 6068*7c356e86SAndroid Build Coastguard Workerdescription: 6069*7c356e86SAndroid Build Coastguard Worker Check reading stdin in a while loop. The read should only read 6070*7c356e86SAndroid Build Coastguard Worker a single line, not a whole stdio buffer; the cat should get 6071*7c356e86SAndroid Build Coastguard Worker the rest. 6072*7c356e86SAndroid Build Coastguard Workerstdin: 6073*7c356e86SAndroid Build Coastguard Worker (echo a; echo b) | while read x ; do 6074*7c356e86SAndroid Build Coastguard Worker echo $x 6075*7c356e86SAndroid Build Coastguard Worker cat > /dev/null 6076*7c356e86SAndroid Build Coastguard Worker done 6077*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6078*7c356e86SAndroid Build Coastguard Worker a 6079*7c356e86SAndroid Build Coastguard Worker--- 6080*7c356e86SAndroid Build Coastguard Workername: regression-26 6081*7c356e86SAndroid Build Coastguard Workerdescription: 6082*7c356e86SAndroid Build Coastguard Worker Check reading stdin in a while loop. The read should read both 6083*7c356e86SAndroid Build Coastguard Worker lines, not just the first. 6084*7c356e86SAndroid Build Coastguard Workerscript: 6085*7c356e86SAndroid Build Coastguard Worker a= 6086*7c356e86SAndroid Build Coastguard Worker while [ "$a" != xxx ] ; do 6087*7c356e86SAndroid Build Coastguard Worker last=$x 6088*7c356e86SAndroid Build Coastguard Worker read x 6089*7c356e86SAndroid Build Coastguard Worker cat /dev/null | sed 's/x/y/' 6090*7c356e86SAndroid Build Coastguard Worker a=x$a 6091*7c356e86SAndroid Build Coastguard Worker done 6092*7c356e86SAndroid Build Coastguard Worker echo $last 6093*7c356e86SAndroid Build Coastguard Workerstdin: 6094*7c356e86SAndroid Build Coastguard Worker a 6095*7c356e86SAndroid Build Coastguard Worker b 6096*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6097*7c356e86SAndroid Build Coastguard Worker b 6098*7c356e86SAndroid Build Coastguard Worker--- 6099*7c356e86SAndroid Build Coastguard Workername: regression-27 6100*7c356e86SAndroid Build Coastguard Workerdescription: 6101*7c356e86SAndroid Build Coastguard Worker The command 6102*7c356e86SAndroid Build Coastguard Worker . /does/not/exist 6103*7c356e86SAndroid Build Coastguard Worker should cause a script to exit. 6104*7c356e86SAndroid Build Coastguard Workerstdin: 6105*7c356e86SAndroid Build Coastguard Worker . does/not/exist 6106*7c356e86SAndroid Build Coastguard Worker echo hi 6107*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 6108*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /does\/not\/exist/ 6109*7c356e86SAndroid Build Coastguard Worker--- 6110*7c356e86SAndroid Build Coastguard Workername: regression-28 6111*7c356e86SAndroid Build Coastguard Workerdescription: 6112*7c356e86SAndroid Build Coastguard Worker variable assignments not detected well 6113*7c356e86SAndroid Build Coastguard Workerstdin: 6114*7c356e86SAndroid Build Coastguard Worker a.x=1 echo hi 6115*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 6116*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /a\.x=1/ 6117*7c356e86SAndroid Build Coastguard Worker--- 6118*7c356e86SAndroid Build Coastguard Workername: regression-29 6119*7c356e86SAndroid Build Coastguard Workerdescription: 6120*7c356e86SAndroid Build Coastguard Worker alias expansion different from AT&T ksh88 6121*7c356e86SAndroid Build Coastguard Workerstdin: 6122*7c356e86SAndroid Build Coastguard Worker alias a='for ' b='i in' 6123*7c356e86SAndroid Build Coastguard Worker a b hi ; do echo $i ; done 6124*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6125*7c356e86SAndroid Build Coastguard Worker hi 6126*7c356e86SAndroid Build Coastguard Worker--- 6127*7c356e86SAndroid Build Coastguard Workername: regression-30 6128*7c356e86SAndroid Build Coastguard Workerdescription: 6129*7c356e86SAndroid Build Coastguard Worker strange characters allowed inside ${...} 6130*7c356e86SAndroid Build Coastguard Workerstdin: 6131*7c356e86SAndroid Build Coastguard Worker echo ${a{b}} 6132*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 6133*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.?/ 6134*7c356e86SAndroid Build Coastguard Worker--- 6135*7c356e86SAndroid Build Coastguard Workername: regression-31 6136*7c356e86SAndroid Build Coastguard Workerdescription: 6137*7c356e86SAndroid Build Coastguard Worker Does read handle partial lines correctly 6138*7c356e86SAndroid Build Coastguard Workerscript: 6139*7c356e86SAndroid Build Coastguard Worker a= ret= 6140*7c356e86SAndroid Build Coastguard Worker while [ "$a" != xxx ] ; do 6141*7c356e86SAndroid Build Coastguard Worker read x y z 6142*7c356e86SAndroid Build Coastguard Worker ret=$? 6143*7c356e86SAndroid Build Coastguard Worker a=x$a 6144*7c356e86SAndroid Build Coastguard Worker done 6145*7c356e86SAndroid Build Coastguard Worker echo "[$x]" 6146*7c356e86SAndroid Build Coastguard Worker echo $ret 6147*7c356e86SAndroid Build Coastguard Workerstdin: ! 6148*7c356e86SAndroid Build Coastguard Worker a A aA 6149*7c356e86SAndroid Build Coastguard Worker b B Bb 6150*7c356e86SAndroid Build Coastguard Worker c 6151*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6152*7c356e86SAndroid Build Coastguard Worker [c] 6153*7c356e86SAndroid Build Coastguard Worker 1 6154*7c356e86SAndroid Build Coastguard Worker--- 6155*7c356e86SAndroid Build Coastguard Workername: regression-32 6156*7c356e86SAndroid Build Coastguard Workerdescription: 6157*7c356e86SAndroid Build Coastguard Worker Does read set variables to null at eof? 6158*7c356e86SAndroid Build Coastguard Workerscript: 6159*7c356e86SAndroid Build Coastguard Worker a= 6160*7c356e86SAndroid Build Coastguard Worker while [ "$a" != xxx ] ; do 6161*7c356e86SAndroid Build Coastguard Worker read x y z 6162*7c356e86SAndroid Build Coastguard Worker a=x$a 6163*7c356e86SAndroid Build Coastguard Worker done 6164*7c356e86SAndroid Build Coastguard Worker echo 1: ${x-x not set} ${y-y not set} ${z-z not set} 6165*7c356e86SAndroid Build Coastguard Worker echo 2: ${x:+x not null} ${y:+y not null} ${z:+z not null} 6166*7c356e86SAndroid Build Coastguard Workerstdin: 6167*7c356e86SAndroid Build Coastguard Worker a A Aa 6168*7c356e86SAndroid Build Coastguard Worker b B Bb 6169*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6170*7c356e86SAndroid Build Coastguard Worker 1: 6171*7c356e86SAndroid Build Coastguard Worker 2: 6172*7c356e86SAndroid Build Coastguard Worker--- 6173*7c356e86SAndroid Build Coastguard Workername: regression-33 6174*7c356e86SAndroid Build Coastguard Workerdescription: 6175*7c356e86SAndroid Build Coastguard Worker Does umask print a leading 0 when umask is 3 digits? 6176*7c356e86SAndroid Build Coastguard Workerstdin: 6177*7c356e86SAndroid Build Coastguard Worker # on MiNT, the first umask call seems to fail 6178*7c356e86SAndroid Build Coastguard Worker umask 022 6179*7c356e86SAndroid Build Coastguard Worker # now, the test proper 6180*7c356e86SAndroid Build Coastguard Worker umask 222 6181*7c356e86SAndroid Build Coastguard Worker umask 6182*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6183*7c356e86SAndroid Build Coastguard Worker 0222 6184*7c356e86SAndroid Build Coastguard Worker--- 6185*7c356e86SAndroid Build Coastguard Workername: regression-35 6186*7c356e86SAndroid Build Coastguard Workerdescription: 6187*7c356e86SAndroid Build Coastguard Worker Temporay files used for here-docs in functions get trashed after 6188*7c356e86SAndroid Build Coastguard Worker the function is parsed (before it is executed) 6189*7c356e86SAndroid Build Coastguard Workerstdin: 6190*7c356e86SAndroid Build Coastguard Worker f1() { 6191*7c356e86SAndroid Build Coastguard Worker cat <<- EOF 6192*7c356e86SAndroid Build Coastguard Worker F1 6193*7c356e86SAndroid Build Coastguard Worker EOF 6194*7c356e86SAndroid Build Coastguard Worker f2() { 6195*7c356e86SAndroid Build Coastguard Worker cat <<- EOF 6196*7c356e86SAndroid Build Coastguard Worker F2 6197*7c356e86SAndroid Build Coastguard Worker EOF 6198*7c356e86SAndroid Build Coastguard Worker } 6199*7c356e86SAndroid Build Coastguard Worker } 6200*7c356e86SAndroid Build Coastguard Worker f1 6201*7c356e86SAndroid Build Coastguard Worker f2 6202*7c356e86SAndroid Build Coastguard Worker unset -f f1 6203*7c356e86SAndroid Build Coastguard Worker f2 6204*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6205*7c356e86SAndroid Build Coastguard Worker F1 6206*7c356e86SAndroid Build Coastguard Worker F2 6207*7c356e86SAndroid Build Coastguard Worker F2 6208*7c356e86SAndroid Build Coastguard Worker--- 6209*7c356e86SAndroid Build Coastguard Workername: regression-36 6210*7c356e86SAndroid Build Coastguard Workerdescription: 6211*7c356e86SAndroid Build Coastguard Worker Command substitution breaks reading in while loop 6212*7c356e86SAndroid Build Coastguard Worker (test from <[email protected]>) 6213*7c356e86SAndroid Build Coastguard Workerstdin: 6214*7c356e86SAndroid Build Coastguard Worker (echo abcdef; echo; echo 123) | 6215*7c356e86SAndroid Build Coastguard Worker while read line 6216*7c356e86SAndroid Build Coastguard Worker do 6217*7c356e86SAndroid Build Coastguard Worker # the following line breaks it 6218*7c356e86SAndroid Build Coastguard Worker c=`echo $line | wc -c` 6219*7c356e86SAndroid Build Coastguard Worker echo $c 6220*7c356e86SAndroid Build Coastguard Worker done 6221*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6222*7c356e86SAndroid Build Coastguard Worker 7 6223*7c356e86SAndroid Build Coastguard Worker 1 6224*7c356e86SAndroid Build Coastguard Worker 4 6225*7c356e86SAndroid Build Coastguard Worker--- 6226*7c356e86SAndroid Build Coastguard Workername: regression-37 6227*7c356e86SAndroid Build Coastguard Workerdescription: 6228*7c356e86SAndroid Build Coastguard Worker Machines with broken times() (reported by <[email protected]>) 6229*7c356e86SAndroid Build Coastguard Worker time does not report correct real time 6230*7c356e86SAndroid Build Coastguard Workerstdin: 6231*7c356e86SAndroid Build Coastguard Worker time sleep 1 6232*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: !/^\s*0\.0[\s\d]+real|^\s*real[\s]+0+\.0/ 6233*7c356e86SAndroid Build Coastguard Worker--- 6234*7c356e86SAndroid Build Coastguard Workername: regression-38 6235*7c356e86SAndroid Build Coastguard Workerdescription: 6236*7c356e86SAndroid Build Coastguard Worker set -e doesn't ignore exit codes for if/while/until/&&/||/!. 6237*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 6238*7c356e86SAndroid Build Coastguard Workerstdin: 6239*7c356e86SAndroid Build Coastguard Worker if false; then echo hi ; fi 6240*7c356e86SAndroid Build Coastguard Worker false || true 6241*7c356e86SAndroid Build Coastguard Worker false && true 6242*7c356e86SAndroid Build Coastguard Worker while false; do echo hi; done 6243*7c356e86SAndroid Build Coastguard Worker echo ok 6244*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6245*7c356e86SAndroid Build Coastguard Worker ok 6246*7c356e86SAndroid Build Coastguard Worker--- 6247*7c356e86SAndroid Build Coastguard Workername: regression-39 6248*7c356e86SAndroid Build Coastguard Workerdescription: 6249*7c356e86SAndroid Build Coastguard Worker Only posh and oksh(2013-07) say “hi” below; FreeBSD sh, 6250*7c356e86SAndroid Build Coastguard Worker GNU bash in POSIX mode, dash, ksh93, mksh don’t. All of 6251*7c356e86SAndroid Build Coastguard Worker them exit 0. The POSIX behaviour is needed by BSD make. 6252*7c356e86SAndroid Build Coastguard Workerstdin: 6253*7c356e86SAndroid Build Coastguard Worker set -e 6254*7c356e86SAndroid Build Coastguard Worker echo `false; echo hi` $(<this-file-does-not-exist) 6255*7c356e86SAndroid Build Coastguard Worker echo $? 6256*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6257*7c356e86SAndroid Build Coastguard Worker 6258*7c356e86SAndroid Build Coastguard Worker 0 6259*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /this-file-does-not-exist/ 6260*7c356e86SAndroid Build Coastguard Worker--- 6261*7c356e86SAndroid Build Coastguard Workername: regression-40 6262*7c356e86SAndroid Build Coastguard Workerdescription: 6263*7c356e86SAndroid Build Coastguard Worker This used to cause a core dump 6264*7c356e86SAndroid Build Coastguard Workerenv-setup: !RANDOM=12! 6265*7c356e86SAndroid Build Coastguard Workerstdin: 6266*7c356e86SAndroid Build Coastguard Worker echo hi 6267*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6268*7c356e86SAndroid Build Coastguard Worker hi 6269*7c356e86SAndroid Build Coastguard Worker--- 6270*7c356e86SAndroid Build Coastguard Workername: regression-41 6271*7c356e86SAndroid Build Coastguard Workerdescription: 6272*7c356e86SAndroid Build Coastguard Worker foo should be set to bar (should not be empty) 6273*7c356e86SAndroid Build Coastguard Workerstdin: 6274*7c356e86SAndroid Build Coastguard Worker foo=` 6275*7c356e86SAndroid Build Coastguard Worker echo bar` 6276*7c356e86SAndroid Build Coastguard Worker echo "($foo)" 6277*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6278*7c356e86SAndroid Build Coastguard Worker (bar) 6279*7c356e86SAndroid Build Coastguard Worker--- 6280*7c356e86SAndroid Build Coastguard Workername: regression-42 6281*7c356e86SAndroid Build Coastguard Workerdescription: 6282*7c356e86SAndroid Build Coastguard Worker Can't use command line assignments to assign readonly parameters. 6283*7c356e86SAndroid Build Coastguard Workerstdin: 6284*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nunset RANDOM\nexport | while IFS= read -r' \ 6285*7c356e86SAndroid Build Coastguard Worker 'RANDOM; do eval '\''print -r -- "$RANDOM=$'\''"$RANDOM"'\'\"\'\; \ 6286*7c356e86SAndroid Build Coastguard Worker done >env; chmod +x env; PATH=.$PATHSEP$PATH 6287*7c356e86SAndroid Build Coastguard Worker foo=bar 6288*7c356e86SAndroid Build Coastguard Worker readonly foo 6289*7c356e86SAndroid Build Coastguard Worker foo=stuff env | grep '^foo' 6290*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 6291*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 6292*7c356e86SAndroid Build Coastguard Worker /read-only/ 6293*7c356e86SAndroid Build Coastguard Worker--- 6294*7c356e86SAndroid Build Coastguard Workername: regression-43 6295*7c356e86SAndroid Build Coastguard Workerdescription: 6296*7c356e86SAndroid Build Coastguard Worker Can subshells be prefixed by redirections (historical shells allow 6297*7c356e86SAndroid Build Coastguard Worker this) 6298*7c356e86SAndroid Build Coastguard Workerstdin: 6299*7c356e86SAndroid Build Coastguard Worker < /dev/null (sed 's/^/X/') 6300*7c356e86SAndroid Build Coastguard Worker--- 6301*7c356e86SAndroid Build Coastguard Workername: regression-45 6302*7c356e86SAndroid Build Coastguard Workerdescription: 6303*7c356e86SAndroid Build Coastguard Worker Parameter assignments with [] recognised correctly 6304*7c356e86SAndroid Build Coastguard Workerstdin: 6305*7c356e86SAndroid Build Coastguard Worker FOO=*[12] 6306*7c356e86SAndroid Build Coastguard Worker BAR=abc[ 6307*7c356e86SAndroid Build Coastguard Worker MORE=[abc] 6308*7c356e86SAndroid Build Coastguard Worker JUNK=a[bc 6309*7c356e86SAndroid Build Coastguard Worker echo "<$FOO>" 6310*7c356e86SAndroid Build Coastguard Worker echo "<$BAR>" 6311*7c356e86SAndroid Build Coastguard Worker echo "<$MORE>" 6312*7c356e86SAndroid Build Coastguard Worker echo "<$JUNK>" 6313*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6314*7c356e86SAndroid Build Coastguard Worker <*[12]> 6315*7c356e86SAndroid Build Coastguard Worker <abc[> 6316*7c356e86SAndroid Build Coastguard Worker <[abc]> 6317*7c356e86SAndroid Build Coastguard Worker <a[bc> 6318*7c356e86SAndroid Build Coastguard Worker--- 6319*7c356e86SAndroid Build Coastguard Workername: regression-46 6320*7c356e86SAndroid Build Coastguard Workerdescription: 6321*7c356e86SAndroid Build Coastguard Worker Check that alias expansion works in command substitutions and 6322*7c356e86SAndroid Build Coastguard Worker at the end of file. 6323*7c356e86SAndroid Build Coastguard Workerstdin: 6324*7c356e86SAndroid Build Coastguard Worker alias x='echo hi' 6325*7c356e86SAndroid Build Coastguard Worker FOO="`x` " 6326*7c356e86SAndroid Build Coastguard Worker echo "[$FOO]" 6327*7c356e86SAndroid Build Coastguard Worker x 6328*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6329*7c356e86SAndroid Build Coastguard Worker [hi ] 6330*7c356e86SAndroid Build Coastguard Worker hi 6331*7c356e86SAndroid Build Coastguard Worker--- 6332*7c356e86SAndroid Build Coastguard Workername: regression-47 6333*7c356e86SAndroid Build Coastguard Workerdescription: 6334*7c356e86SAndroid Build Coastguard Worker Check that aliases are fully read. 6335*7c356e86SAndroid Build Coastguard Workerstdin: 6336*7c356e86SAndroid Build Coastguard Worker alias x='echo hi; 6337*7c356e86SAndroid Build Coastguard Worker echo there' 6338*7c356e86SAndroid Build Coastguard Worker x 6339*7c356e86SAndroid Build Coastguard Worker echo done 6340*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6341*7c356e86SAndroid Build Coastguard Worker hi 6342*7c356e86SAndroid Build Coastguard Worker there 6343*7c356e86SAndroid Build Coastguard Worker done 6344*7c356e86SAndroid Build Coastguard Worker--- 6345*7c356e86SAndroid Build Coastguard Workername: regression-48 6346*7c356e86SAndroid Build Coastguard Workerdescription: 6347*7c356e86SAndroid Build Coastguard Worker Check that (here doc) temp files are not left behind after an exec. 6348*7c356e86SAndroid Build Coastguard Workerstdin: 6349*7c356e86SAndroid Build Coastguard Worker mkdir foo || exit 1 6350*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD/foo "$__progname" <<- 'EOF' 6351*7c356e86SAndroid Build Coastguard Worker x() { 6352*7c356e86SAndroid Build Coastguard Worker sed 's/^/X /' << E_O_F 6353*7c356e86SAndroid Build Coastguard Worker hi 6354*7c356e86SAndroid Build Coastguard Worker there 6355*7c356e86SAndroid Build Coastguard Worker folks 6356*7c356e86SAndroid Build Coastguard Worker E_O_F 6357*7c356e86SAndroid Build Coastguard Worker echo "done ($?)" 6358*7c356e86SAndroid Build Coastguard Worker } 6359*7c356e86SAndroid Build Coastguard Worker echo=echo; [ -x /bin/echo ] && echo=/bin/echo 6360*7c356e86SAndroid Build Coastguard Worker exec $echo subtest-1 hi 6361*7c356e86SAndroid Build Coastguard Worker EOF 6362*7c356e86SAndroid Build Coastguard Worker echo subtest-1 foo/* 6363*7c356e86SAndroid Build Coastguard Worker TMPDIR=$PWD/foo "$__progname" <<- 'EOF' 6364*7c356e86SAndroid Build Coastguard Worker echo=echo; [ -x /bin/echo ] && echo=/bin/echo 6365*7c356e86SAndroid Build Coastguard Worker sed 's/^/X /' << E_O_F; exec $echo subtest-2 hi 6366*7c356e86SAndroid Build Coastguard Worker a 6367*7c356e86SAndroid Build Coastguard Worker few 6368*7c356e86SAndroid Build Coastguard Worker lines 6369*7c356e86SAndroid Build Coastguard Worker E_O_F 6370*7c356e86SAndroid Build Coastguard Worker EOF 6371*7c356e86SAndroid Build Coastguard Worker echo subtest-2 foo/* 6372*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6373*7c356e86SAndroid Build Coastguard Worker subtest-1 hi 6374*7c356e86SAndroid Build Coastguard Worker subtest-1 foo/* 6375*7c356e86SAndroid Build Coastguard Worker X a 6376*7c356e86SAndroid Build Coastguard Worker X few 6377*7c356e86SAndroid Build Coastguard Worker X lines 6378*7c356e86SAndroid Build Coastguard Worker subtest-2 hi 6379*7c356e86SAndroid Build Coastguard Worker subtest-2 foo/* 6380*7c356e86SAndroid Build Coastguard Worker--- 6381*7c356e86SAndroid Build Coastguard Workername: regression-49 6382*7c356e86SAndroid Build Coastguard Workerdescription: 6383*7c356e86SAndroid Build Coastguard Worker Check that unset params with attributes are reported by set, those 6384*7c356e86SAndroid Build Coastguard Worker sans attributes are not. 6385*7c356e86SAndroid Build Coastguard Workerstdin: 6386*7c356e86SAndroid Build Coastguard Worker unset FOO BAR 6387*7c356e86SAndroid Build Coastguard Worker echo X$FOO 6388*7c356e86SAndroid Build Coastguard Worker export BAR 6389*7c356e86SAndroid Build Coastguard Worker typeset -i BLAH 6390*7c356e86SAndroid Build Coastguard Worker set | grep FOO 6391*7c356e86SAndroid Build Coastguard Worker set | grep BAR 6392*7c356e86SAndroid Build Coastguard Worker set | grep BLAH 6393*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6394*7c356e86SAndroid Build Coastguard Worker X 6395*7c356e86SAndroid Build Coastguard Worker BAR 6396*7c356e86SAndroid Build Coastguard Worker BLAH 6397*7c356e86SAndroid Build Coastguard Worker--- 6398*7c356e86SAndroid Build Coastguard Workername: regression-50 6399*7c356e86SAndroid Build Coastguard Workerdescription: 6400*7c356e86SAndroid Build Coastguard Worker Check that aliases do not use continuation prompt after trailing 6401*7c356e86SAndroid Build Coastguard Worker semi-colon. 6402*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "envf" 6403*7c356e86SAndroid Build Coastguard Worker PS1=Y 6404*7c356e86SAndroid Build Coastguard Worker PS2=X 6405*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./envf! 6406*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 6407*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 6408*7c356e86SAndroid Build Coastguard Workerstdin: 6409*7c356e86SAndroid Build Coastguard Worker alias foo='echo hi ; ' 6410*7c356e86SAndroid Build Coastguard Worker foo 6411*7c356e86SAndroid Build Coastguard Worker foo echo there 6412*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6413*7c356e86SAndroid Build Coastguard Worker hi 6414*7c356e86SAndroid Build Coastguard Worker hi 6415*7c356e86SAndroid Build Coastguard Worker there 6416*7c356e86SAndroid Build Coastguard Workerexpected-stderr: ! 6417*7c356e86SAndroid Build Coastguard Worker YYYY 6418*7c356e86SAndroid Build Coastguard Worker--- 6419*7c356e86SAndroid Build Coastguard Workername: regression-51 6420*7c356e86SAndroid Build Coastguard Workerdescription: 6421*7c356e86SAndroid Build Coastguard Worker Check that set allows both +o and -o options on same command line. 6422*7c356e86SAndroid Build Coastguard Workerstdin: 6423*7c356e86SAndroid Build Coastguard Worker set a b c 6424*7c356e86SAndroid Build Coastguard Worker set -o noglob +o allexport 6425*7c356e86SAndroid Build Coastguard Worker echo A: $*, * 6426*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6427*7c356e86SAndroid Build Coastguard Worker A: a b c, * 6428*7c356e86SAndroid Build Coastguard Worker--- 6429*7c356e86SAndroid Build Coastguard Workername: regression-52 6430*7c356e86SAndroid Build Coastguard Workerdescription: 6431*7c356e86SAndroid Build Coastguard Worker Check that globbing works in pipelined commands 6432*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "envf" 6433*7c356e86SAndroid Build Coastguard Worker PS1=P 6434*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abc" 6435*7c356e86SAndroid Build Coastguard Worker stuff 6436*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./envf! 6437*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 6438*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 6439*7c356e86SAndroid Build Coastguard Workerstdin: 6440*7c356e86SAndroid Build Coastguard Worker sed 's/^/X /' < ab* 6441*7c356e86SAndroid Build Coastguard Worker echo mark 1 6442*7c356e86SAndroid Build Coastguard Worker sed 's/^/X /' < ab* | sed 's/^/Y /' 6443*7c356e86SAndroid Build Coastguard Worker echo mark 2 6444*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6445*7c356e86SAndroid Build Coastguard Worker X stuff 6446*7c356e86SAndroid Build Coastguard Worker mark 1 6447*7c356e86SAndroid Build Coastguard Worker Y X stuff 6448*7c356e86SAndroid Build Coastguard Worker mark 2 6449*7c356e86SAndroid Build Coastguard Workerexpected-stderr: ! 6450*7c356e86SAndroid Build Coastguard Worker PPPPP 6451*7c356e86SAndroid Build Coastguard Worker--- 6452*7c356e86SAndroid Build Coastguard Workername: regression-53 6453*7c356e86SAndroid Build Coastguard Workerdescription: 6454*7c356e86SAndroid Build Coastguard Worker Check that getopts works in functions 6455*7c356e86SAndroid Build Coastguard Workerstdin: 6456*7c356e86SAndroid Build Coastguard Worker bfunc() { 6457*7c356e86SAndroid Build Coastguard Worker echo bfunc: enter "(args: $*; OPTIND=$OPTIND)" 6458*7c356e86SAndroid Build Coastguard Worker while getopts B oc; do 6459*7c356e86SAndroid Build Coastguard Worker case $oc in 6460*7c356e86SAndroid Build Coastguard Worker (B) 6461*7c356e86SAndroid Build Coastguard Worker echo bfunc: B option 6462*7c356e86SAndroid Build Coastguard Worker ;; 6463*7c356e86SAndroid Build Coastguard Worker (*) 6464*7c356e86SAndroid Build Coastguard Worker echo bfunc: odd option "($oc)" 6465*7c356e86SAndroid Build Coastguard Worker ;; 6466*7c356e86SAndroid Build Coastguard Worker esac 6467*7c356e86SAndroid Build Coastguard Worker done 6468*7c356e86SAndroid Build Coastguard Worker echo bfunc: leave 6469*7c356e86SAndroid Build Coastguard Worker } 6470*7c356e86SAndroid Build Coastguard Worker 6471*7c356e86SAndroid Build Coastguard Worker function kfunc { 6472*7c356e86SAndroid Build Coastguard Worker echo kfunc: enter "(args: $*; OPTIND=$OPTIND)" 6473*7c356e86SAndroid Build Coastguard Worker while getopts K oc; do 6474*7c356e86SAndroid Build Coastguard Worker case $oc in 6475*7c356e86SAndroid Build Coastguard Worker (K) 6476*7c356e86SAndroid Build Coastguard Worker echo kfunc: K option 6477*7c356e86SAndroid Build Coastguard Worker ;; 6478*7c356e86SAndroid Build Coastguard Worker (*) 6479*7c356e86SAndroid Build Coastguard Worker echo bfunc: odd option "($oc)" 6480*7c356e86SAndroid Build Coastguard Worker ;; 6481*7c356e86SAndroid Build Coastguard Worker esac 6482*7c356e86SAndroid Build Coastguard Worker done 6483*7c356e86SAndroid Build Coastguard Worker echo kfunc: leave 6484*7c356e86SAndroid Build Coastguard Worker } 6485*7c356e86SAndroid Build Coastguard Worker 6486*7c356e86SAndroid Build Coastguard Worker set -- -f -b -k -l 6487*7c356e86SAndroid Build Coastguard Worker echo "line 1: OPTIND=$OPTIND" 6488*7c356e86SAndroid Build Coastguard Worker getopts kbfl optc 6489*7c356e86SAndroid Build Coastguard Worker echo "line 2: ret=$?, optc=$optc, OPTIND=$OPTIND" 6490*7c356e86SAndroid Build Coastguard Worker bfunc -BBB blah 6491*7c356e86SAndroid Build Coastguard Worker echo "line 3: OPTIND=$OPTIND" 6492*7c356e86SAndroid Build Coastguard Worker getopts kbfl optc 6493*7c356e86SAndroid Build Coastguard Worker echo "line 4: ret=$?, optc=$optc, OPTIND=$OPTIND" 6494*7c356e86SAndroid Build Coastguard Worker kfunc -KKK blah 6495*7c356e86SAndroid Build Coastguard Worker echo "line 5: OPTIND=$OPTIND" 6496*7c356e86SAndroid Build Coastguard Worker getopts kbfl optc 6497*7c356e86SAndroid Build Coastguard Worker echo "line 6: ret=$?, optc=$optc, OPTIND=$OPTIND" 6498*7c356e86SAndroid Build Coastguard Worker echo 6499*7c356e86SAndroid Build Coastguard Worker 6500*7c356e86SAndroid Build Coastguard Worker OPTIND=1 6501*7c356e86SAndroid Build Coastguard Worker set -- -fbkl 6502*7c356e86SAndroid Build Coastguard Worker echo "line 10: OPTIND=$OPTIND" 6503*7c356e86SAndroid Build Coastguard Worker getopts kbfl optc 6504*7c356e86SAndroid Build Coastguard Worker echo "line 20: ret=$?, optc=$optc, OPTIND=$OPTIND" 6505*7c356e86SAndroid Build Coastguard Worker bfunc -BBB blah 6506*7c356e86SAndroid Build Coastguard Worker echo "line 30: OPTIND=$OPTIND" 6507*7c356e86SAndroid Build Coastguard Worker getopts kbfl optc 6508*7c356e86SAndroid Build Coastguard Worker echo "line 40: ret=$?, optc=$optc, OPTIND=$OPTIND" 6509*7c356e86SAndroid Build Coastguard Worker kfunc -KKK blah 6510*7c356e86SAndroid Build Coastguard Worker echo "line 50: OPTIND=$OPTIND" 6511*7c356e86SAndroid Build Coastguard Worker getopts kbfl optc 6512*7c356e86SAndroid Build Coastguard Worker echo "line 60: ret=$?, optc=$optc, OPTIND=$OPTIND" 6513*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6514*7c356e86SAndroid Build Coastguard Worker line 1: OPTIND=1 6515*7c356e86SAndroid Build Coastguard Worker line 2: ret=0, optc=f, OPTIND=2 6516*7c356e86SAndroid Build Coastguard Worker bfunc: enter (args: -BBB blah; OPTIND=2) 6517*7c356e86SAndroid Build Coastguard Worker bfunc: B option 6518*7c356e86SAndroid Build Coastguard Worker bfunc: B option 6519*7c356e86SAndroid Build Coastguard Worker bfunc: leave 6520*7c356e86SAndroid Build Coastguard Worker line 3: OPTIND=2 6521*7c356e86SAndroid Build Coastguard Worker line 4: ret=0, optc=b, OPTIND=3 6522*7c356e86SAndroid Build Coastguard Worker kfunc: enter (args: -KKK blah; OPTIND=1) 6523*7c356e86SAndroid Build Coastguard Worker kfunc: K option 6524*7c356e86SAndroid Build Coastguard Worker kfunc: K option 6525*7c356e86SAndroid Build Coastguard Worker kfunc: K option 6526*7c356e86SAndroid Build Coastguard Worker kfunc: leave 6527*7c356e86SAndroid Build Coastguard Worker line 5: OPTIND=3 6528*7c356e86SAndroid Build Coastguard Worker line 6: ret=0, optc=k, OPTIND=4 6529*7c356e86SAndroid Build Coastguard Worker 6530*7c356e86SAndroid Build Coastguard Worker line 10: OPTIND=1 6531*7c356e86SAndroid Build Coastguard Worker line 20: ret=0, optc=f, OPTIND=2 6532*7c356e86SAndroid Build Coastguard Worker bfunc: enter (args: -BBB blah; OPTIND=2) 6533*7c356e86SAndroid Build Coastguard Worker bfunc: B option 6534*7c356e86SAndroid Build Coastguard Worker bfunc: B option 6535*7c356e86SAndroid Build Coastguard Worker bfunc: leave 6536*7c356e86SAndroid Build Coastguard Worker line 30: OPTIND=2 6537*7c356e86SAndroid Build Coastguard Worker line 40: ret=1, optc=?, OPTIND=2 6538*7c356e86SAndroid Build Coastguard Worker kfunc: enter (args: -KKK blah; OPTIND=1) 6539*7c356e86SAndroid Build Coastguard Worker kfunc: K option 6540*7c356e86SAndroid Build Coastguard Worker kfunc: K option 6541*7c356e86SAndroid Build Coastguard Worker kfunc: K option 6542*7c356e86SAndroid Build Coastguard Worker kfunc: leave 6543*7c356e86SAndroid Build Coastguard Worker line 50: OPTIND=2 6544*7c356e86SAndroid Build Coastguard Worker line 60: ret=1, optc=?, OPTIND=2 6545*7c356e86SAndroid Build Coastguard Worker--- 6546*7c356e86SAndroid Build Coastguard Workername: regression-54 6547*7c356e86SAndroid Build Coastguard Workerdescription: 6548*7c356e86SAndroid Build Coastguard Worker Check that ; is not required before the then in if (( ... )) then ... 6549*7c356e86SAndroid Build Coastguard Workerstdin: 6550*7c356e86SAndroid Build Coastguard Worker if (( 1 )) then 6551*7c356e86SAndroid Build Coastguard Worker echo ok dparen 6552*7c356e86SAndroid Build Coastguard Worker fi 6553*7c356e86SAndroid Build Coastguard Worker if [[ -n 1 ]] then 6554*7c356e86SAndroid Build Coastguard Worker echo ok dbrackets 6555*7c356e86SAndroid Build Coastguard Worker fi 6556*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6557*7c356e86SAndroid Build Coastguard Worker ok dparen 6558*7c356e86SAndroid Build Coastguard Worker ok dbrackets 6559*7c356e86SAndroid Build Coastguard Worker--- 6560*7c356e86SAndroid Build Coastguard Workername: regression-55 6561*7c356e86SAndroid Build Coastguard Workerdescription: 6562*7c356e86SAndroid Build Coastguard Worker Check ${foo:%bar} is allowed (ksh88 allows it...) 6563*7c356e86SAndroid Build Coastguard Workerstdin: 6564*7c356e86SAndroid Build Coastguard Worker x=fooXbarXblah 6565*7c356e86SAndroid Build Coastguard Worker echo 1 ${x%X*} 6566*7c356e86SAndroid Build Coastguard Worker echo 2 ${x:%X*} 6567*7c356e86SAndroid Build Coastguard Worker echo 3 ${x%%X*} 6568*7c356e86SAndroid Build Coastguard Worker echo 4 ${x:%%X*} 6569*7c356e86SAndroid Build Coastguard Worker echo 5 ${x#*X} 6570*7c356e86SAndroid Build Coastguard Worker echo 6 ${x:#*X} 6571*7c356e86SAndroid Build Coastguard Worker echo 7 ${x##*X} 6572*7c356e86SAndroid Build Coastguard Worker echo 8 ${x:##*X} 6573*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6574*7c356e86SAndroid Build Coastguard Worker 1 fooXbar 6575*7c356e86SAndroid Build Coastguard Worker 2 fooXbar 6576*7c356e86SAndroid Build Coastguard Worker 3 foo 6577*7c356e86SAndroid Build Coastguard Worker 4 foo 6578*7c356e86SAndroid Build Coastguard Worker 5 barXblah 6579*7c356e86SAndroid Build Coastguard Worker 6 barXblah 6580*7c356e86SAndroid Build Coastguard Worker 7 blah 6581*7c356e86SAndroid Build Coastguard Worker 8 blah 6582*7c356e86SAndroid Build Coastguard Worker--- 6583*7c356e86SAndroid Build Coastguard Workername: regression-57 6584*7c356e86SAndroid Build Coastguard Workerdescription: 6585*7c356e86SAndroid Build Coastguard Worker Check if typeset output is correct for 6586*7c356e86SAndroid Build Coastguard Worker uninitialised array elements. 6587*7c356e86SAndroid Build Coastguard Workerstdin: 6588*7c356e86SAndroid Build Coastguard Worker typeset -i xxx[4] 6589*7c356e86SAndroid Build Coastguard Worker echo A 6590*7c356e86SAndroid Build Coastguard Worker typeset -i | grep xxx | sed 's/^/ /' 6591*7c356e86SAndroid Build Coastguard Worker echo B 6592*7c356e86SAndroid Build Coastguard Worker typeset | grep xxx | sed 's/^/ /' 6593*7c356e86SAndroid Build Coastguard Worker 6594*7c356e86SAndroid Build Coastguard Worker xxx[1]=2+5 6595*7c356e86SAndroid Build Coastguard Worker echo M 6596*7c356e86SAndroid Build Coastguard Worker typeset -i | grep xxx | sed 's/^/ /' 6597*7c356e86SAndroid Build Coastguard Worker echo N 6598*7c356e86SAndroid Build Coastguard Worker typeset | grep xxx | sed 's/^/ /' 6599*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6600*7c356e86SAndroid Build Coastguard Worker A 6601*7c356e86SAndroid Build Coastguard Worker xxx 6602*7c356e86SAndroid Build Coastguard Worker B 6603*7c356e86SAndroid Build Coastguard Worker typeset -i xxx 6604*7c356e86SAndroid Build Coastguard Worker M 6605*7c356e86SAndroid Build Coastguard Worker xxx[1]=7 6606*7c356e86SAndroid Build Coastguard Worker N 6607*7c356e86SAndroid Build Coastguard Worker set -A xxx 6608*7c356e86SAndroid Build Coastguard Worker typeset -i xxx[1] 6609*7c356e86SAndroid Build Coastguard Worker--- 6610*7c356e86SAndroid Build Coastguard Workername: regression-58 6611*7c356e86SAndroid Build Coastguard Workerdescription: 6612*7c356e86SAndroid Build Coastguard Worker Check if trap exit is ok (exit not mistaken for signal name) 6613*7c356e86SAndroid Build Coastguard Workerstdin: 6614*7c356e86SAndroid Build Coastguard Worker trap 'echo hi' exit 6615*7c356e86SAndroid Build Coastguard Worker trap exit 1 6616*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6617*7c356e86SAndroid Build Coastguard Worker hi 6618*7c356e86SAndroid Build Coastguard Worker--- 6619*7c356e86SAndroid Build Coastguard Workername: regression-59 6620*7c356e86SAndroid Build Coastguard Workerdescription: 6621*7c356e86SAndroid Build Coastguard Worker Check if ${#array[*]} is calculated correctly. 6622*7c356e86SAndroid Build Coastguard Workerstdin: 6623*7c356e86SAndroid Build Coastguard Worker a[12]=hi 6624*7c356e86SAndroid Build Coastguard Worker a[8]=there 6625*7c356e86SAndroid Build Coastguard Worker echo ${#a[*]} 6626*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6627*7c356e86SAndroid Build Coastguard Worker 2 6628*7c356e86SAndroid Build Coastguard Worker--- 6629*7c356e86SAndroid Build Coastguard Workername: regression-60 6630*7c356e86SAndroid Build Coastguard Workerdescription: 6631*7c356e86SAndroid Build Coastguard Worker Check if default exit status is previous command 6632*7c356e86SAndroid Build Coastguard Workerstdin: 6633*7c356e86SAndroid Build Coastguard Worker (true; exit) 6634*7c356e86SAndroid Build Coastguard Worker echo A $? 6635*7c356e86SAndroid Build Coastguard Worker (false; exit) 6636*7c356e86SAndroid Build Coastguard Worker echo B $? 6637*7c356e86SAndroid Build Coastguard Worker ( (exit 103) ; exit) 6638*7c356e86SAndroid Build Coastguard Worker echo C $? 6639*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6640*7c356e86SAndroid Build Coastguard Worker A 0 6641*7c356e86SAndroid Build Coastguard Worker B 1 6642*7c356e86SAndroid Build Coastguard Worker C 103 6643*7c356e86SAndroid Build Coastguard Worker--- 6644*7c356e86SAndroid Build Coastguard Workername: regression-61 6645*7c356e86SAndroid Build Coastguard Workerdescription: 6646*7c356e86SAndroid Build Coastguard Worker Check if EXIT trap is executed for sub shells. 6647*7c356e86SAndroid Build Coastguard Workerstdin: 6648*7c356e86SAndroid Build Coastguard Worker trap 'echo parent exit' EXIT 6649*7c356e86SAndroid Build Coastguard Worker echo start 6650*7c356e86SAndroid Build Coastguard Worker (echo A; echo A last) 6651*7c356e86SAndroid Build Coastguard Worker echo B 6652*7c356e86SAndroid Build Coastguard Worker (echo C; trap 'echo sub exit' EXIT; echo C last) 6653*7c356e86SAndroid Build Coastguard Worker echo parent last 6654*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6655*7c356e86SAndroid Build Coastguard Worker start 6656*7c356e86SAndroid Build Coastguard Worker A 6657*7c356e86SAndroid Build Coastguard Worker A last 6658*7c356e86SAndroid Build Coastguard Worker B 6659*7c356e86SAndroid Build Coastguard Worker C 6660*7c356e86SAndroid Build Coastguard Worker C last 6661*7c356e86SAndroid Build Coastguard Worker sub exit 6662*7c356e86SAndroid Build Coastguard Worker parent last 6663*7c356e86SAndroid Build Coastguard Worker parent exit 6664*7c356e86SAndroid Build Coastguard Worker--- 6665*7c356e86SAndroid Build Coastguard Workername: regression-62 6666*7c356e86SAndroid Build Coastguard Workerdescription: 6667*7c356e86SAndroid Build Coastguard Worker Check if test -nt/-ot succeeds if second(first) file is missing. 6668*7c356e86SAndroid Build Coastguard Workerstdin: 6669*7c356e86SAndroid Build Coastguard Worker matrix() { 6670*7c356e86SAndroid Build Coastguard Worker local a b c d e f g h 6671*7c356e86SAndroid Build Coastguard Worker test a -nt b; a=$? 6672*7c356e86SAndroid Build Coastguard Worker test b -nt a; b=$? 6673*7c356e86SAndroid Build Coastguard Worker test a -ot b; c=$? 6674*7c356e86SAndroid Build Coastguard Worker test b -ot a; d=$? 6675*7c356e86SAndroid Build Coastguard Worker test a -nt a; e=$? 6676*7c356e86SAndroid Build Coastguard Worker test b -nt b; f=$? 6677*7c356e86SAndroid Build Coastguard Worker test a -ot a; g=$? 6678*7c356e86SAndroid Build Coastguard Worker test b -ot b; h=$? 6679*7c356e86SAndroid Build Coastguard Worker echo $1 $a $b $c $d / $e $f $g $h . 6680*7c356e86SAndroid Build Coastguard Worker } 6681*7c356e86SAndroid Build Coastguard Worker matrix a 6682*7c356e86SAndroid Build Coastguard Worker :>a 6683*7c356e86SAndroid Build Coastguard Worker matrix b 6684*7c356e86SAndroid Build Coastguard Worker sleep 2 # mtime granularity for OS/2 and FAT 6685*7c356e86SAndroid Build Coastguard Worker :>b 6686*7c356e86SAndroid Build Coastguard Worker matrix c 6687*7c356e86SAndroid Build Coastguard Worker sleep 2 6688*7c356e86SAndroid Build Coastguard Worker echo dummy >a # Debian GNU/Hurd #955270 6689*7c356e86SAndroid Build Coastguard Worker matrix d 6690*7c356e86SAndroid Build Coastguard Worker rm a 6691*7c356e86SAndroid Build Coastguard Worker matrix e 6692*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6693*7c356e86SAndroid Build Coastguard Worker a 1 1 1 1 / 1 1 1 1 . 6694*7c356e86SAndroid Build Coastguard Worker b 0 1 1 0 / 1 1 1 1 . 6695*7c356e86SAndroid Build Coastguard Worker c 1 0 0 1 / 1 1 1 1 . 6696*7c356e86SAndroid Build Coastguard Worker d 0 1 1 0 / 1 1 1 1 . 6697*7c356e86SAndroid Build Coastguard Worker e 1 0 0 1 / 1 1 1 1 . 6698*7c356e86SAndroid Build Coastguard Worker--- 6699*7c356e86SAndroid Build Coastguard Workername: regression-63 6700*7c356e86SAndroid Build Coastguard Workerdescription: 6701*7c356e86SAndroid Build Coastguard Worker Check if typeset, export, and readonly work 6702*7c356e86SAndroid Build Coastguard Workerstdin: 6703*7c356e86SAndroid Build Coastguard Worker { 6704*7c356e86SAndroid Build Coastguard Worker echo FNORD-0 6705*7c356e86SAndroid Build Coastguard Worker FNORD_A=1 6706*7c356e86SAndroid Build Coastguard Worker FNORD_B=2 6707*7c356e86SAndroid Build Coastguard Worker FNORD_C=3 6708*7c356e86SAndroid Build Coastguard Worker FNORD_D=4 6709*7c356e86SAndroid Build Coastguard Worker FNORD_E=5 6710*7c356e86SAndroid Build Coastguard Worker FNORD_F=6 6711*7c356e86SAndroid Build Coastguard Worker FNORD_G=7 6712*7c356e86SAndroid Build Coastguard Worker FNORD_H=8 6713*7c356e86SAndroid Build Coastguard Worker integer FNORD_E FNORD_F FNORD_G FNORD_H 6714*7c356e86SAndroid Build Coastguard Worker export FNORD_C FNORD_D FNORD_G FNORD_H 6715*7c356e86SAndroid Build Coastguard Worker readonly FNORD_B FNORD_D FNORD_F FNORD_H 6716*7c356e86SAndroid Build Coastguard Worker echo FNORD-1 6717*7c356e86SAndroid Build Coastguard Worker export 6718*7c356e86SAndroid Build Coastguard Worker echo FNORD-2 6719*7c356e86SAndroid Build Coastguard Worker export -p 6720*7c356e86SAndroid Build Coastguard Worker echo FNORD-3 6721*7c356e86SAndroid Build Coastguard Worker readonly 6722*7c356e86SAndroid Build Coastguard Worker echo FNORD-4 6723*7c356e86SAndroid Build Coastguard Worker readonly -p 6724*7c356e86SAndroid Build Coastguard Worker echo FNORD-5 6725*7c356e86SAndroid Build Coastguard Worker typeset 6726*7c356e86SAndroid Build Coastguard Worker echo FNORD-6 6727*7c356e86SAndroid Build Coastguard Worker typeset -p 6728*7c356e86SAndroid Build Coastguard Worker echo FNORD-7 6729*7c356e86SAndroid Build Coastguard Worker typeset - 6730*7c356e86SAndroid Build Coastguard Worker echo FNORD-8 6731*7c356e86SAndroid Build Coastguard Worker } | fgrep FNORD 6732*7c356e86SAndroid Build Coastguard Worker fnord=(42 23) 6733*7c356e86SAndroid Build Coastguard Worker typeset -p fnord 6734*7c356e86SAndroid Build Coastguard Worker echo FNORD-9 6735*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6736*7c356e86SAndroid Build Coastguard Worker FNORD-0 6737*7c356e86SAndroid Build Coastguard Worker FNORD-1 6738*7c356e86SAndroid Build Coastguard Worker FNORD_C 6739*7c356e86SAndroid Build Coastguard Worker FNORD_D 6740*7c356e86SAndroid Build Coastguard Worker FNORD_G 6741*7c356e86SAndroid Build Coastguard Worker FNORD_H 6742*7c356e86SAndroid Build Coastguard Worker FNORD-2 6743*7c356e86SAndroid Build Coastguard Worker export FNORD_C=3 6744*7c356e86SAndroid Build Coastguard Worker export FNORD_D=4 6745*7c356e86SAndroid Build Coastguard Worker export FNORD_G=7 6746*7c356e86SAndroid Build Coastguard Worker export FNORD_H=8 6747*7c356e86SAndroid Build Coastguard Worker FNORD-3 6748*7c356e86SAndroid Build Coastguard Worker FNORD_B 6749*7c356e86SAndroid Build Coastguard Worker FNORD_D 6750*7c356e86SAndroid Build Coastguard Worker FNORD_F 6751*7c356e86SAndroid Build Coastguard Worker FNORD_H 6752*7c356e86SAndroid Build Coastguard Worker FNORD-4 6753*7c356e86SAndroid Build Coastguard Worker readonly FNORD_B=2 6754*7c356e86SAndroid Build Coastguard Worker readonly FNORD_D=4 6755*7c356e86SAndroid Build Coastguard Worker readonly FNORD_F=6 6756*7c356e86SAndroid Build Coastguard Worker readonly FNORD_H=8 6757*7c356e86SAndroid Build Coastguard Worker FNORD-5 6758*7c356e86SAndroid Build Coastguard Worker typeset FNORD_A 6759*7c356e86SAndroid Build Coastguard Worker typeset -r FNORD_B 6760*7c356e86SAndroid Build Coastguard Worker typeset -x FNORD_C 6761*7c356e86SAndroid Build Coastguard Worker typeset -x -r FNORD_D 6762*7c356e86SAndroid Build Coastguard Worker typeset -i FNORD_E 6763*7c356e86SAndroid Build Coastguard Worker typeset -i -r FNORD_F 6764*7c356e86SAndroid Build Coastguard Worker typeset -i -x FNORD_G 6765*7c356e86SAndroid Build Coastguard Worker typeset -i -x -r FNORD_H 6766*7c356e86SAndroid Build Coastguard Worker FNORD-6 6767*7c356e86SAndroid Build Coastguard Worker typeset FNORD_A=1 6768*7c356e86SAndroid Build Coastguard Worker typeset -r FNORD_B=2 6769*7c356e86SAndroid Build Coastguard Worker typeset -x FNORD_C=3 6770*7c356e86SAndroid Build Coastguard Worker typeset -x -r FNORD_D=4 6771*7c356e86SAndroid Build Coastguard Worker typeset -i FNORD_E=5 6772*7c356e86SAndroid Build Coastguard Worker typeset -i -r FNORD_F=6 6773*7c356e86SAndroid Build Coastguard Worker typeset -i -x FNORD_G=7 6774*7c356e86SAndroid Build Coastguard Worker typeset -i -x -r FNORD_H=8 6775*7c356e86SAndroid Build Coastguard Worker FNORD-7 6776*7c356e86SAndroid Build Coastguard Worker FNORD_A=1 6777*7c356e86SAndroid Build Coastguard Worker FNORD_B=2 6778*7c356e86SAndroid Build Coastguard Worker FNORD_C=3 6779*7c356e86SAndroid Build Coastguard Worker FNORD_D=4 6780*7c356e86SAndroid Build Coastguard Worker FNORD_E=5 6781*7c356e86SAndroid Build Coastguard Worker FNORD_F=6 6782*7c356e86SAndroid Build Coastguard Worker FNORD_G=7 6783*7c356e86SAndroid Build Coastguard Worker FNORD_H=8 6784*7c356e86SAndroid Build Coastguard Worker FNORD-8 6785*7c356e86SAndroid Build Coastguard Worker set -A fnord 6786*7c356e86SAndroid Build Coastguard Worker typeset fnord[0]=42 6787*7c356e86SAndroid Build Coastguard Worker typeset fnord[1]=23 6788*7c356e86SAndroid Build Coastguard Worker FNORD-9 6789*7c356e86SAndroid Build Coastguard Worker--- 6790*7c356e86SAndroid Build Coastguard Workername: regression-64 6791*7c356e86SAndroid Build Coastguard Workerdescription: 6792*7c356e86SAndroid Build Coastguard Worker Check that we can redefine functions calling time builtin 6793*7c356e86SAndroid Build Coastguard Workerstdin: 6794*7c356e86SAndroid Build Coastguard Worker t() { 6795*7c356e86SAndroid Build Coastguard Worker time >/dev/null 6796*7c356e86SAndroid Build Coastguard Worker } 6797*7c356e86SAndroid Build Coastguard Worker t 2>/dev/null 6798*7c356e86SAndroid Build Coastguard Worker t() { 6799*7c356e86SAndroid Build Coastguard Worker time 6800*7c356e86SAndroid Build Coastguard Worker } 6801*7c356e86SAndroid Build Coastguard Worker--- 6802*7c356e86SAndroid Build Coastguard Workername: regression-65 6803*7c356e86SAndroid Build Coastguard Workerdescription: 6804*7c356e86SAndroid Build Coastguard Worker check for a regression with sleep builtin and signal mask 6805*7c356e86SAndroid Build Coastguard Workercategory: !nojsig 6806*7c356e86SAndroid Build Coastguard Workertime-limit: 5 6807*7c356e86SAndroid Build Coastguard Workerstdin: 6808*7c356e86SAndroid Build Coastguard Worker sleep 1 6809*7c356e86SAndroid Build Coastguard Worker echo blub |& 6810*7c356e86SAndroid Build Coastguard Worker while read -p line; do :; done 6811*7c356e86SAndroid Build Coastguard Worker echo ok 6812*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6813*7c356e86SAndroid Build Coastguard Worker ok 6814*7c356e86SAndroid Build Coastguard Worker--- 6815*7c356e86SAndroid Build Coastguard Workername: regression-66 6816*7c356e86SAndroid Build Coastguard Workerdescription: 6817*7c356e86SAndroid Build Coastguard Worker Check that quoting is sane 6818*7c356e86SAndroid Build Coastguard Workercategory: !nojsig 6819*7c356e86SAndroid Build Coastguard Workerstdin: 6820*7c356e86SAndroid Build Coastguard Worker ac_space=' ' 6821*7c356e86SAndroid Build Coastguard Worker ac_newline=' 6822*7c356e86SAndroid Build Coastguard Worker ' 6823*7c356e86SAndroid Build Coastguard Worker set | grep ^ac_ |& 6824*7c356e86SAndroid Build Coastguard Worker set -A lines 6825*7c356e86SAndroid Build Coastguard Worker while IFS= read -pr line; do 6826*7c356e86SAndroid Build Coastguard Worker if [[ $line = *space* ]]; then 6827*7c356e86SAndroid Build Coastguard Worker lines[0]=$line 6828*7c356e86SAndroid Build Coastguard Worker else 6829*7c356e86SAndroid Build Coastguard Worker lines[1]=$line 6830*7c356e86SAndroid Build Coastguard Worker fi 6831*7c356e86SAndroid Build Coastguard Worker done 6832*7c356e86SAndroid Build Coastguard Worker for line in "${lines[@]}"; do 6833*7c356e86SAndroid Build Coastguard Worker print -r -- "$line" 6834*7c356e86SAndroid Build Coastguard Worker done 6835*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6836*7c356e86SAndroid Build Coastguard Worker ac_space=' ' 6837*7c356e86SAndroid Build Coastguard Worker ac_newline=$'\n' 6838*7c356e86SAndroid Build Coastguard Worker--- 6839*7c356e86SAndroid Build Coastguard Workername: regression-67 6840*7c356e86SAndroid Build Coastguard Workerdescription: 6841*7c356e86SAndroid Build Coastguard Worker Check that we can both break and use source on the same line 6842*7c356e86SAndroid Build Coastguard Workerstdin: 6843*7c356e86SAndroid Build Coastguard Worker for s in s; do break; done; print -s s 6844*7c356e86SAndroid Build Coastguard Worker--- 6845*7c356e86SAndroid Build Coastguard Workername: regression-68 6846*7c356e86SAndroid Build Coastguard Workerdescription: 6847*7c356e86SAndroid Build Coastguard Worker Check that all common arithmetic operators work as expected 6848*7c356e86SAndroid Build Coastguard Workerstdin: 6849*7c356e86SAndroid Build Coastguard Worker echo 1 $(( a = 5 )) . 6850*7c356e86SAndroid Build Coastguard Worker echo 2 $(( ++a )) , $(( a++ )) , $(( a )) . 6851*7c356e86SAndroid Build Coastguard Worker echo 3 $(( --a )) , $(( a-- )) , $(( a )) . 6852*7c356e86SAndroid Build Coastguard Worker echo 4 $(( a == 5 )) , $(( a == 6 )) . 6853*7c356e86SAndroid Build Coastguard Worker echo 5 $(( a != 5 )) , $(( a != 6 )) . 6854*7c356e86SAndroid Build Coastguard Worker echo 6 $(( a *= 3 )) . 6855*7c356e86SAndroid Build Coastguard Worker echo 7 $(( a /= 5 )) . 6856*7c356e86SAndroid Build Coastguard Worker echo 8 $(( a %= 2 )) . 6857*7c356e86SAndroid Build Coastguard Worker echo 9 $(( a += 9 )) . 6858*7c356e86SAndroid Build Coastguard Worker echo 10 $(( a -= 4 )) . 6859*7c356e86SAndroid Build Coastguard Worker echo 11 $(( a <<= 1 )) . 6860*7c356e86SAndroid Build Coastguard Worker echo 12 $(( a >>= 1 )) . 6861*7c356e86SAndroid Build Coastguard Worker echo 13 $(( a &= 4 )) . 6862*7c356e86SAndroid Build Coastguard Worker echo 14 $(( a ^= a )) . 6863*7c356e86SAndroid Build Coastguard Worker echo 15 $(( a |= 5 )) . 6864*7c356e86SAndroid Build Coastguard Worker echo 16 $(( 5 << 1 )) . 6865*7c356e86SAndroid Build Coastguard Worker echo 17 $(( 5 >> 1 )) . 6866*7c356e86SAndroid Build Coastguard Worker echo 18 $(( 5 <= 6 )) , $(( 5 <= 5 )) , $(( 5 <= 4 )) . 6867*7c356e86SAndroid Build Coastguard Worker echo 19 $(( 5 >= 6 )) , $(( 5 >= 5 )) , $(( 5 >= 4 )) . 6868*7c356e86SAndroid Build Coastguard Worker echo 20 $(( 5 < 6 )) , $(( 5 < 5 )) , $(( 5 < 4 )) . 6869*7c356e86SAndroid Build Coastguard Worker echo 21 $(( 5 > 6 )) , $(( 5 > 5 )) , $(( 5 > 4 )) . 6870*7c356e86SAndroid Build Coastguard Worker echo 22 $(( 0 && 0 )) , $(( 0 && 1 )) , $(( 1 && 0 )) , $(( 1 && 1 )) . 6871*7c356e86SAndroid Build Coastguard Worker echo 23 $(( 0 || 0 )) , $(( 0 || 1 )) , $(( 1 || 0 )) , $(( 1 || 1 )) . 6872*7c356e86SAndroid Build Coastguard Worker echo 24 $(( 5 * 3 )) . 6873*7c356e86SAndroid Build Coastguard Worker echo 25 $(( 7 / 2 )) . 6874*7c356e86SAndroid Build Coastguard Worker echo 26 $(( 5 % 5 )) , $(( 5 % 4 )) , $(( 5 % 1 )) , $(( 5 % -1 )) , $(( 5 % -2 )) . 6875*7c356e86SAndroid Build Coastguard Worker echo 27 $(( 5 + 2 )) , $(( 5 + 0 )) , $(( 5 + -2 )) . 6876*7c356e86SAndroid Build Coastguard Worker echo 28 $(( 5 - 2 )) , $(( 5 - 0 )) , $(( 5 - -2 )) . 6877*7c356e86SAndroid Build Coastguard Worker echo 29 $(( 6 & 4 )) , $(( 6 & 8 )) . 6878*7c356e86SAndroid Build Coastguard Worker echo 30 $(( 4 ^ 2 )) , $(( 4 ^ 4 )) . 6879*7c356e86SAndroid Build Coastguard Worker echo 31 $(( 4 | 2 )) , $(( 4 | 4 )) , $(( 4 | 0 )) . 6880*7c356e86SAndroid Build Coastguard Worker echo 32 $(( 0 ? 1 : 2 )) , $(( 3 ? 4 : 5 )) . 6881*7c356e86SAndroid Build Coastguard Worker echo 33 $(( 5 , 2 , 3 )) . 6882*7c356e86SAndroid Build Coastguard Worker echo 34 $(( ~0 )) , $(( ~1 )) , $(( ~~1 )) , $(( ~~2 )) . 6883*7c356e86SAndroid Build Coastguard Worker echo 35 $(( !0 )) , $(( !1 )) , $(( !!1 )) , $(( !!2 )) . 6884*7c356e86SAndroid Build Coastguard Worker echo 36 $(( (5) )) . 6885*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6886*7c356e86SAndroid Build Coastguard Worker 1 5 . 6887*7c356e86SAndroid Build Coastguard Worker 2 6 , 6 , 7 . 6888*7c356e86SAndroid Build Coastguard Worker 3 6 , 6 , 5 . 6889*7c356e86SAndroid Build Coastguard Worker 4 1 , 0 . 6890*7c356e86SAndroid Build Coastguard Worker 5 0 , 1 . 6891*7c356e86SAndroid Build Coastguard Worker 6 15 . 6892*7c356e86SAndroid Build Coastguard Worker 7 3 . 6893*7c356e86SAndroid Build Coastguard Worker 8 1 . 6894*7c356e86SAndroid Build Coastguard Worker 9 10 . 6895*7c356e86SAndroid Build Coastguard Worker 10 6 . 6896*7c356e86SAndroid Build Coastguard Worker 11 12 . 6897*7c356e86SAndroid Build Coastguard Worker 12 6 . 6898*7c356e86SAndroid Build Coastguard Worker 13 4 . 6899*7c356e86SAndroid Build Coastguard Worker 14 0 . 6900*7c356e86SAndroid Build Coastguard Worker 15 5 . 6901*7c356e86SAndroid Build Coastguard Worker 16 10 . 6902*7c356e86SAndroid Build Coastguard Worker 17 2 . 6903*7c356e86SAndroid Build Coastguard Worker 18 1 , 1 , 0 . 6904*7c356e86SAndroid Build Coastguard Worker 19 0 , 1 , 1 . 6905*7c356e86SAndroid Build Coastguard Worker 20 1 , 0 , 0 . 6906*7c356e86SAndroid Build Coastguard Worker 21 0 , 0 , 1 . 6907*7c356e86SAndroid Build Coastguard Worker 22 0 , 0 , 0 , 1 . 6908*7c356e86SAndroid Build Coastguard Worker 23 0 , 1 , 1 , 1 . 6909*7c356e86SAndroid Build Coastguard Worker 24 15 . 6910*7c356e86SAndroid Build Coastguard Worker 25 3 . 6911*7c356e86SAndroid Build Coastguard Worker 26 0 , 1 , 0 , 0 , 1 . 6912*7c356e86SAndroid Build Coastguard Worker 27 7 , 5 , 3 . 6913*7c356e86SAndroid Build Coastguard Worker 28 3 , 5 , 7 . 6914*7c356e86SAndroid Build Coastguard Worker 29 4 , 0 . 6915*7c356e86SAndroid Build Coastguard Worker 30 6 , 0 . 6916*7c356e86SAndroid Build Coastguard Worker 31 6 , 4 , 4 . 6917*7c356e86SAndroid Build Coastguard Worker 32 2 , 4 . 6918*7c356e86SAndroid Build Coastguard Worker 33 3 . 6919*7c356e86SAndroid Build Coastguard Worker 34 -1 , -2 , 1 , 2 . 6920*7c356e86SAndroid Build Coastguard Worker 35 1 , 0 , 1 , 1 . 6921*7c356e86SAndroid Build Coastguard Worker 36 5 . 6922*7c356e86SAndroid Build Coastguard Worker--- 6923*7c356e86SAndroid Build Coastguard Workername: regression-69 6924*7c356e86SAndroid Build Coastguard Workerdescription: 6925*7c356e86SAndroid Build Coastguard Worker Check that all non-lksh arithmetic operators work as expected 6926*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-no 6927*7c356e86SAndroid Build Coastguard Workerstdin: 6928*7c356e86SAndroid Build Coastguard Worker a=5 b=0x80000005 6929*7c356e86SAndroid Build Coastguard Worker echo 1 $(( a ^<= 1 )) , $(( b ^<= 1 )) . 6930*7c356e86SAndroid Build Coastguard Worker echo 2 $(( a ^>= 2 )) , $(( b ^>= 2 )) . 6931*7c356e86SAndroid Build Coastguard Worker echo 3 $(( 5 ^< 1 )) . 6932*7c356e86SAndroid Build Coastguard Worker echo 4 $(( 5 ^> 1 )) . 6933*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6934*7c356e86SAndroid Build Coastguard Worker 1 10 , 11 . 6935*7c356e86SAndroid Build Coastguard Worker 2 -2147483646 , -1073741822 . 6936*7c356e86SAndroid Build Coastguard Worker 3 10 . 6937*7c356e86SAndroid Build Coastguard Worker 4 -2147483646 . 6938*7c356e86SAndroid Build Coastguard Worker--- 6939*7c356e86SAndroid Build Coastguard Workername: export-1 6940*7c356e86SAndroid Build Coastguard Workerdescription: 6941*7c356e86SAndroid Build Coastguard Worker Check allexport works, basic 6942*7c356e86SAndroid Build Coastguard Workerstdin: 6943*7c356e86SAndroid Build Coastguard Worker qa=1 6944*7c356e86SAndroid Build Coastguard Worker set -A qb 2 3 6945*7c356e86SAndroid Build Coastguard Worker set -a 6946*7c356e86SAndroid Build Coastguard Worker qc=4 6947*7c356e86SAndroid Build Coastguard Worker set -A qd 5 6 6948*7c356e86SAndroid Build Coastguard Worker export -p | grep '^export q' 6949*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6950*7c356e86SAndroid Build Coastguard Worker export qc=4 6951*7c356e86SAndroid Build Coastguard Worker export qd[0]=5 6952*7c356e86SAndroid Build Coastguard Worker export qd[1]=6 6953*7c356e86SAndroid Build Coastguard Worker--- 6954*7c356e86SAndroid Build Coastguard Workername: readonly-0 6955*7c356e86SAndroid Build Coastguard Workerdescription: 6956*7c356e86SAndroid Build Coastguard Worker Ensure readonly is honoured for assignments and unset 6957*7c356e86SAndroid Build Coastguard Workerstdin: 6958*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'u=x; echo $? $u .' || echo aborted, $? 6959*7c356e86SAndroid Build Coastguard Worker echo = 6960*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'readonly u; u=x; echo $? $u .' || echo aborted, $? 6961*7c356e86SAndroid Build Coastguard Worker echo = 6962*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'u=x; readonly u; unset u; echo $? $u .' || echo aborted, $? 6963*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6964*7c356e86SAndroid Build Coastguard Worker 0 x . 6965*7c356e86SAndroid Build Coastguard Worker = 6966*7c356e86SAndroid Build Coastguard Worker aborted, 2 6967*7c356e86SAndroid Build Coastguard Worker = 6968*7c356e86SAndroid Build Coastguard Worker 1 x . 6969*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 6970*7c356e86SAndroid Build Coastguard Worker /read-only/ 6971*7c356e86SAndroid Build Coastguard Worker--- 6972*7c356e86SAndroid Build Coastguard Workername: readonly-1 6973*7c356e86SAndroid Build Coastguard Workerdescription: 6974*7c356e86SAndroid Build Coastguard Worker http://austingroupbugs.net/view.php?id=367 for export 6975*7c356e86SAndroid Build Coastguard Workerstdin: 6976*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'readonly foo; export foo=a; echo $?' || echo aborted, $? 6977*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6978*7c356e86SAndroid Build Coastguard Worker aborted, 2 6979*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 6980*7c356e86SAndroid Build Coastguard Worker /read-only/ 6981*7c356e86SAndroid Build Coastguard Worker--- 6982*7c356e86SAndroid Build Coastguard Workername: readonly-2a 6983*7c356e86SAndroid Build Coastguard Workerdescription: 6984*7c356e86SAndroid Build Coastguard Worker Check that getopts works as intended, for readonly-2b to be valid 6985*7c356e86SAndroid Build Coastguard Workerstdin: 6986*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'set -- -a b; getopts a c; echo $? $c .; getopts a c; echo $? $c .' || echo aborted, $? 6987*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6988*7c356e86SAndroid Build Coastguard Worker 0 a . 6989*7c356e86SAndroid Build Coastguard Worker 1 ? . 6990*7c356e86SAndroid Build Coastguard Worker--- 6991*7c356e86SAndroid Build Coastguard Workername: readonly-2b 6992*7c356e86SAndroid Build Coastguard Workerdescription: 6993*7c356e86SAndroid Build Coastguard Worker http://austingroupbugs.net/view.php?id=367 for getopts 6994*7c356e86SAndroid Build Coastguard Workerstdin: 6995*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'readonly c; set -- -a b; getopts a c; echo $? $c .' || echo aborted, $? 6996*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 6997*7c356e86SAndroid Build Coastguard Worker 2 . 6998*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 6999*7c356e86SAndroid Build Coastguard Worker /read-only/ 7000*7c356e86SAndroid Build Coastguard Worker--- 7001*7c356e86SAndroid Build Coastguard Workername: readonly-3 7002*7c356e86SAndroid Build Coastguard Workerdescription: 7003*7c356e86SAndroid Build Coastguard Worker http://austingroupbugs.net/view.php?id=367 for read 7004*7c356e86SAndroid Build Coastguard Workerstdin: 7005*7c356e86SAndroid Build Coastguard Worker echo x | "$__progname" -c 'read s; echo $? $s .' || echo aborted, $? 7006*7c356e86SAndroid Build Coastguard Worker echo y | "$__progname" -c 'readonly s; read s; echo $? $s .' || echo aborted, $? 7007*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7008*7c356e86SAndroid Build Coastguard Worker 0 x . 7009*7c356e86SAndroid Build Coastguard Worker 2 . 7010*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 7011*7c356e86SAndroid Build Coastguard Worker /read-only/ 7012*7c356e86SAndroid Build Coastguard Worker--- 7013*7c356e86SAndroid Build Coastguard Workername: readonly-4 7014*7c356e86SAndroid Build Coastguard Workerdescription: 7015*7c356e86SAndroid Build Coastguard Worker Do not permit bypassing readonly for first array item 7016*7c356e86SAndroid Build Coastguard Workerstdin: 7017*7c356e86SAndroid Build Coastguard Worker set -A arr -- foo bar 7018*7c356e86SAndroid Build Coastguard Worker readonly arr 7019*7c356e86SAndroid Build Coastguard Worker arr=baz 7020*7c356e86SAndroid Build Coastguard Worker print -r -- "${arr[@]}" 7021*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 7022*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 7023*7c356e86SAndroid Build Coastguard Worker /read[ -]?only/ 7024*7c356e86SAndroid Build Coastguard Worker--- 7025*7c356e86SAndroid Build Coastguard Workername: readonly-5 7026*7c356e86SAndroid Build Coastguard Workerdescription: 7027*7c356e86SAndroid Build Coastguard Worker Ensure readonly is idempotent 7028*7c356e86SAndroid Build Coastguard Workerstdin: 7029*7c356e86SAndroid Build Coastguard Worker readonly x=1 7030*7c356e86SAndroid Build Coastguard Worker readonly x 7031*7c356e86SAndroid Build Coastguard Worker--- 7032*7c356e86SAndroid Build Coastguard Workername: syntax-1 7033*7c356e86SAndroid Build Coastguard Workerdescription: 7034*7c356e86SAndroid Build Coastguard Worker Check that lone ampersand is a syntax error 7035*7c356e86SAndroid Build Coastguard Workerstdin: 7036*7c356e86SAndroid Build Coastguard Worker & 7037*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 7038*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 7039*7c356e86SAndroid Build Coastguard Worker /syntax error/ 7040*7c356e86SAndroid Build Coastguard Worker--- 7041*7c356e86SAndroid Build Coastguard Workername: xxx-quoted-newline-1 7042*7c356e86SAndroid Build Coastguard Workerdescription: 7043*7c356e86SAndroid Build Coastguard Worker Check that \<newline> works inside of ${} 7044*7c356e86SAndroid Build Coastguard Workerstdin: 7045*7c356e86SAndroid Build Coastguard Worker abc=2 7046*7c356e86SAndroid Build Coastguard Worker echo ${ab\ 7047*7c356e86SAndroid Build Coastguard Worker c} 7048*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7049*7c356e86SAndroid Build Coastguard Worker 2 7050*7c356e86SAndroid Build Coastguard Worker--- 7051*7c356e86SAndroid Build Coastguard Workername: xxx-quoted-newline-2 7052*7c356e86SAndroid Build Coastguard Workerdescription: 7053*7c356e86SAndroid Build Coastguard Worker Check that \<newline> works at the start of a here document 7054*7c356e86SAndroid Build Coastguard Workerstdin: 7055*7c356e86SAndroid Build Coastguard Worker cat << EO\ 7056*7c356e86SAndroid Build Coastguard Worker F 7057*7c356e86SAndroid Build Coastguard Worker hi 7058*7c356e86SAndroid Build Coastguard Worker EOF 7059*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7060*7c356e86SAndroid Build Coastguard Worker hi 7061*7c356e86SAndroid Build Coastguard Worker--- 7062*7c356e86SAndroid Build Coastguard Workername: xxx-quoted-newline-3 7063*7c356e86SAndroid Build Coastguard Workerdescription: 7064*7c356e86SAndroid Build Coastguard Worker Check that \<newline> works at the end of a here document 7065*7c356e86SAndroid Build Coastguard Workerstdin: 7066*7c356e86SAndroid Build Coastguard Worker cat << EOF 7067*7c356e86SAndroid Build Coastguard Worker hi 7068*7c356e86SAndroid Build Coastguard Worker EO\ 7069*7c356e86SAndroid Build Coastguard Worker F 7070*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7071*7c356e86SAndroid Build Coastguard Worker hi 7072*7c356e86SAndroid Build Coastguard Worker--- 7073*7c356e86SAndroid Build Coastguard Workername: xxx-multi-assignment-cmd 7074*7c356e86SAndroid Build Coastguard Workerdescription: 7075*7c356e86SAndroid Build Coastguard Worker Check that assignments in a command affect subsequent assignments 7076*7c356e86SAndroid Build Coastguard Worker in the same command 7077*7c356e86SAndroid Build Coastguard Workerstdin: 7078*7c356e86SAndroid Build Coastguard Worker FOO=abc 7079*7c356e86SAndroid Build Coastguard Worker FOO=123 BAR=$FOO 7080*7c356e86SAndroid Build Coastguard Worker echo $BAR 7081*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7082*7c356e86SAndroid Build Coastguard Worker 123 7083*7c356e86SAndroid Build Coastguard Worker--- 7084*7c356e86SAndroid Build Coastguard Workername: xxx-multi-assignment-posix-cmd 7085*7c356e86SAndroid Build Coastguard Workerdescription: 7086*7c356e86SAndroid Build Coastguard Worker Check that the behaviour for multiple assignments with a 7087*7c356e86SAndroid Build Coastguard Worker command name matches POSIX. See: 7088*7c356e86SAndroid Build Coastguard Worker http://thread.gmane.org/gmane.comp.standards.posix.austin.general/1925 7089*7c356e86SAndroid Build Coastguard Workerstdin: 7090*7c356e86SAndroid Build Coastguard Worker X=a Y=b; X=$Y Y=$X "$__progname" -c 'echo 1 $X $Y .'; echo 2 $X $Y . 7091*7c356e86SAndroid Build Coastguard Worker unset X Y Z 7092*7c356e86SAndroid Build Coastguard Worker X=a Y=${X=b} Z=$X "$__progname" -c 'echo 3 $Z .' 7093*7c356e86SAndroid Build Coastguard Worker unset X Y Z 7094*7c356e86SAndroid Build Coastguard Worker X=a Y=${X=b} Z=$X; echo 4 $Z . 7095*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7096*7c356e86SAndroid Build Coastguard Worker 1 b a . 7097*7c356e86SAndroid Build Coastguard Worker 2 a b . 7098*7c356e86SAndroid Build Coastguard Worker 3 b . 7099*7c356e86SAndroid Build Coastguard Worker 4 a . 7100*7c356e86SAndroid Build Coastguard Worker--- 7101*7c356e86SAndroid Build Coastguard Workername: xxx-multi-assignment-posix-nocmd 7102*7c356e86SAndroid Build Coastguard Workerdescription: 7103*7c356e86SAndroid Build Coastguard Worker Check that the behaviour for multiple assignments with no 7104*7c356e86SAndroid Build Coastguard Worker command name matches POSIX (Debian #334182). See: 7105*7c356e86SAndroid Build Coastguard Worker http://thread.gmane.org/gmane.comp.standards.posix.austin.general/1925 7106*7c356e86SAndroid Build Coastguard Workerstdin: 7107*7c356e86SAndroid Build Coastguard Worker X=a Y=b; X=$Y Y=$X; echo 1 $X $Y . 7108*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7109*7c356e86SAndroid Build Coastguard Worker 1 b b . 7110*7c356e86SAndroid Build Coastguard Worker--- 7111*7c356e86SAndroid Build Coastguard Workername: xxx-multi-assignment-posix-subassign 7112*7c356e86SAndroid Build Coastguard Workerdescription: 7113*7c356e86SAndroid Build Coastguard Worker Check that the behaviour for multiple assignments matches POSIX: 7114*7c356e86SAndroid Build Coastguard Worker - The assignment words shall be expanded in the current execution 7115*7c356e86SAndroid Build Coastguard Worker environment. 7116*7c356e86SAndroid Build Coastguard Worker - The assignments happen in the temporary execution environment. 7117*7c356e86SAndroid Build Coastguard Workerstdin: 7118*7c356e86SAndroid Build Coastguard Worker unset X Y Z 7119*7c356e86SAndroid Build Coastguard Worker Z=a Y=${X:=b} sh -c 'echo +$X+ +$Y+ +$Z+' 7120*7c356e86SAndroid Build Coastguard Worker echo /$X/ 7121*7c356e86SAndroid Build Coastguard Worker # Now for the special case: 7122*7c356e86SAndroid Build Coastguard Worker unset X Y Z 7123*7c356e86SAndroid Build Coastguard Worker X= Y=${X:=b} sh -c 'echo +$X+ +$Y+' 7124*7c356e86SAndroid Build Coastguard Worker echo /$X/ 7125*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7126*7c356e86SAndroid Build Coastguard Worker ++ +b+ +a+ 7127*7c356e86SAndroid Build Coastguard Worker /b/ 7128*7c356e86SAndroid Build Coastguard Worker ++ +b+ 7129*7c356e86SAndroid Build Coastguard Worker /b/ 7130*7c356e86SAndroid Build Coastguard Worker--- 7131*7c356e86SAndroid Build Coastguard Workername: xxx-exec-environment-1 7132*7c356e86SAndroid Build Coastguard Workerdescription: 7133*7c356e86SAndroid Build Coastguard Worker Check to see if exec sets it's environment correctly 7134*7c356e86SAndroid Build Coastguard Workerstdin: 7135*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nunset RANDOM\nexport | while IFS= read -r' \ 7136*7c356e86SAndroid Build Coastguard Worker 'RANDOM; do eval '\''print -r -- "$RANDOM=$'\''"$RANDOM"'\'\"\'\; \ 7137*7c356e86SAndroid Build Coastguard Worker done >env; chmod +x env; PATH=.$PATHSEP$PATH 7138*7c356e86SAndroid Build Coastguard Worker FOO=bar exec env 7139*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern: 7140*7c356e86SAndroid Build Coastguard Worker /(^|.*\n)FOO=bar\n/ 7141*7c356e86SAndroid Build Coastguard Worker--- 7142*7c356e86SAndroid Build Coastguard Workername: xxx-exec-environment-2 7143*7c356e86SAndroid Build Coastguard Workerdescription: 7144*7c356e86SAndroid Build Coastguard Worker Check to make sure exec doesn't change environment if a program 7145*7c356e86SAndroid Build Coastguard Worker isn't exec-ed 7146*7c356e86SAndroid Build Coastguard Workerstdin: 7147*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nunset RANDOM\nexport | while IFS= read -r' \ 7148*7c356e86SAndroid Build Coastguard Worker 'RANDOM; do eval '\''print -r -- "$RANDOM=$'\''"$RANDOM"'\'\"\'\; \ 7149*7c356e86SAndroid Build Coastguard Worker done >env; chmod +x env; PATH=.$PATHSEP$PATH 7150*7c356e86SAndroid Build Coastguard Worker env >bar1 7151*7c356e86SAndroid Build Coastguard Worker FOO=bar exec; env >bar2 7152*7c356e86SAndroid Build Coastguard Worker cmp -s bar1 bar2 7153*7c356e86SAndroid Build Coastguard Worker--- 7154*7c356e86SAndroid Build Coastguard Workername: exec-function-environment-1 7155*7c356e86SAndroid Build Coastguard Workerdescription: 7156*7c356e86SAndroid Build Coastguard Worker Check assignments in function calls and whether they affect 7157*7c356e86SAndroid Build Coastguard Worker the current execution environment 7158*7c356e86SAndroid Build Coastguard Workerstdin: 7159*7c356e86SAndroid Build Coastguard Worker f() { a=2; }; g() { b=3; echo y$c-; }; a=1 f; b=2; c=1 g 7160*7c356e86SAndroid Build Coastguard Worker echo x$a-$b- z$c- 7161*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7162*7c356e86SAndroid Build Coastguard Worker y1- 7163*7c356e86SAndroid Build Coastguard Worker x-3- z- 7164*7c356e86SAndroid Build Coastguard Worker--- 7165*7c356e86SAndroid Build Coastguard Workername: exec-modern-korn-shell 7166*7c356e86SAndroid Build Coastguard Workerdescription: 7167*7c356e86SAndroid Build Coastguard Worker Check that exec can execute any command that makes it 7168*7c356e86SAndroid Build Coastguard Worker through syntax and parser 7169*7c356e86SAndroid Build Coastguard Workerstdin: 7170*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\necho tf' >lq 7171*7c356e86SAndroid Build Coastguard Worker chmod +x lq 7172*7c356e86SAndroid Build Coastguard Worker PATH=$PWD 7173*7c356e86SAndroid Build Coastguard Worker exec 2>&1 7174*7c356e86SAndroid Build Coastguard Worker foo() { print two; } 7175*7c356e86SAndroid Build Coastguard Worker print =1 7176*7c356e86SAndroid Build Coastguard Worker (exec print one) 7177*7c356e86SAndroid Build Coastguard Worker print =2 7178*7c356e86SAndroid Build Coastguard Worker (exec foo) 7179*7c356e86SAndroid Build Coastguard Worker print =3 7180*7c356e86SAndroid Build Coastguard Worker (exec ls) 7181*7c356e86SAndroid Build Coastguard Worker print =4 7182*7c356e86SAndroid Build Coastguard Worker (exec lq) 7183*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern: 7184*7c356e86SAndroid Build Coastguard Worker /=1\none\n=2\ntwo\n=3\n.*: ls: inaccessible or not found\n=4\ntf\n/ 7185*7c356e86SAndroid Build Coastguard Worker--- 7186*7c356e86SAndroid Build Coastguard Workername: exec-ksh88 7187*7c356e86SAndroid Build Coastguard Workerdescription: 7188*7c356e86SAndroid Build Coastguard Worker Check that exec only executes after a PATH search 7189*7c356e86SAndroid Build Coastguard Workerarguments: !-o!posix! 7190*7c356e86SAndroid Build Coastguard Workerstdin: 7191*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\necho tf' >lq 7192*7c356e86SAndroid Build Coastguard Worker chmod +x lq 7193*7c356e86SAndroid Build Coastguard Worker PATH=$PWD 7194*7c356e86SAndroid Build Coastguard Worker exec 2>&1 7195*7c356e86SAndroid Build Coastguard Worker foo() { print two; } 7196*7c356e86SAndroid Build Coastguard Worker print =1 7197*7c356e86SAndroid Build Coastguard Worker (exec print one) 7198*7c356e86SAndroid Build Coastguard Worker print =2 7199*7c356e86SAndroid Build Coastguard Worker (exec foo) 7200*7c356e86SAndroid Build Coastguard Worker print =3 7201*7c356e86SAndroid Build Coastguard Worker (exec ls) 7202*7c356e86SAndroid Build Coastguard Worker print =4 7203*7c356e86SAndroid Build Coastguard Worker (exec lq) 7204*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern: 7205*7c356e86SAndroid Build Coastguard Worker /=1\n.*: print: inaccessible or not found\n=2\n.*: foo: inaccessible or not found\n=3\n.*: ls: inaccessible or not found\n=4\ntf\n/ 7206*7c356e86SAndroid Build Coastguard Worker--- 7207*7c356e86SAndroid Build Coastguard Workername: xxx-what-do-you-call-this-1 7208*7c356e86SAndroid Build Coastguard Workerstdin: 7209*7c356e86SAndroid Build Coastguard Worker echo "${foo:-"a"}*" 7210*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7211*7c356e86SAndroid Build Coastguard Worker a* 7212*7c356e86SAndroid Build Coastguard Worker--- 7213*7c356e86SAndroid Build Coastguard Workername: xxx-prefix-strip-1 7214*7c356e86SAndroid Build Coastguard Workerstdin: 7215*7c356e86SAndroid Build Coastguard Worker foo='a cdef' 7216*7c356e86SAndroid Build Coastguard Worker echo ${foo#a c} 7217*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7218*7c356e86SAndroid Build Coastguard Worker def 7219*7c356e86SAndroid Build Coastguard Worker--- 7220*7c356e86SAndroid Build Coastguard Workername: xxx-prefix-strip-2 7221*7c356e86SAndroid Build Coastguard Workerstdin: 7222*7c356e86SAndroid Build Coastguard Worker set a c 7223*7c356e86SAndroid Build Coastguard Worker x='a cdef' 7224*7c356e86SAndroid Build Coastguard Worker echo ${x#$*} 7225*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7226*7c356e86SAndroid Build Coastguard Worker def 7227*7c356e86SAndroid Build Coastguard Worker--- 7228*7c356e86SAndroid Build Coastguard Workername: xxx-variable-syntax-1 7229*7c356e86SAndroid Build Coastguard Workerstdin: 7230*7c356e86SAndroid Build Coastguard Worker echo ${:} 7231*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 7232*7c356e86SAndroid Build Coastguard Worker /bad substitution/ 7233*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 7234*7c356e86SAndroid Build Coastguard Worker--- 7235*7c356e86SAndroid Build Coastguard Workername: xxx-variable-syntax-2 7236*7c356e86SAndroid Build Coastguard Workerstdin: 7237*7c356e86SAndroid Build Coastguard Worker set 0 7238*7c356e86SAndroid Build Coastguard Worker echo ${*:0} 7239*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 7240*7c356e86SAndroid Build Coastguard Worker /bad substitution/ 7241*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 7242*7c356e86SAndroid Build Coastguard Worker--- 7243*7c356e86SAndroid Build Coastguard Workername: xxx-variable-syntax-3 7244*7c356e86SAndroid Build Coastguard Workerstdin: 7245*7c356e86SAndroid Build Coastguard Worker set -A foo 0 7246*7c356e86SAndroid Build Coastguard Worker echo ${foo[*]:0} 7247*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 7248*7c356e86SAndroid Build Coastguard Worker /bad substitution/ 7249*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 7250*7c356e86SAndroid Build Coastguard Worker--- 7251*7c356e86SAndroid Build Coastguard Workername: xxx-variable-syntax-4 7252*7c356e86SAndroid Build Coastguard Workerdescription: 7253*7c356e86SAndroid Build Coastguard Worker Not all kinds of trims are currently impossible, check those who do 7254*7c356e86SAndroid Build Coastguard Workerstdin: 7255*7c356e86SAndroid Build Coastguard Worker foo() { 7256*7c356e86SAndroid Build Coastguard Worker echo "<$*> X${*:+ }X" 7257*7c356e86SAndroid Build Coastguard Worker } 7258*7c356e86SAndroid Build Coastguard Worker foo a b 7259*7c356e86SAndroid Build Coastguard Worker foo "" c 7260*7c356e86SAndroid Build Coastguard Worker foo "" 7261*7c356e86SAndroid Build Coastguard Worker foo "" "" 7262*7c356e86SAndroid Build Coastguard Worker IFS=: 7263*7c356e86SAndroid Build Coastguard Worker foo a b 7264*7c356e86SAndroid Build Coastguard Worker foo "" c 7265*7c356e86SAndroid Build Coastguard Worker foo "" 7266*7c356e86SAndroid Build Coastguard Worker foo "" "" 7267*7c356e86SAndroid Build Coastguard Worker IFS= 7268*7c356e86SAndroid Build Coastguard Worker foo a b 7269*7c356e86SAndroid Build Coastguard Worker foo "" c 7270*7c356e86SAndroid Build Coastguard Worker foo "" 7271*7c356e86SAndroid Build Coastguard Worker foo "" "" 7272*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7273*7c356e86SAndroid Build Coastguard Worker <a b> X X 7274*7c356e86SAndroid Build Coastguard Worker < c> X X 7275*7c356e86SAndroid Build Coastguard Worker <> XX 7276*7c356e86SAndroid Build Coastguard Worker < > X X 7277*7c356e86SAndroid Build Coastguard Worker <a:b> X X 7278*7c356e86SAndroid Build Coastguard Worker <:c> X X 7279*7c356e86SAndroid Build Coastguard Worker <> XX 7280*7c356e86SAndroid Build Coastguard Worker <:> X X 7281*7c356e86SAndroid Build Coastguard Worker <ab> X X 7282*7c356e86SAndroid Build Coastguard Worker <c> X X 7283*7c356e86SAndroid Build Coastguard Worker <> XX 7284*7c356e86SAndroid Build Coastguard Worker <> XX 7285*7c356e86SAndroid Build Coastguard Worker--- 7286*7c356e86SAndroid Build Coastguard Workername: xxx-substitution-eval-order 7287*7c356e86SAndroid Build Coastguard Workerdescription: 7288*7c356e86SAndroid Build Coastguard Worker Check order of evaluation of expressions 7289*7c356e86SAndroid Build Coastguard Workerstdin: 7290*7c356e86SAndroid Build Coastguard Worker i=1 x= y= 7291*7c356e86SAndroid Build Coastguard Worker set -A A abc def GHI j G k 7292*7c356e86SAndroid Build Coastguard Worker echo ${A[x=(i+=1)]#${A[y=(i+=2)]}} 7293*7c356e86SAndroid Build Coastguard Worker echo $x $y 7294*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7295*7c356e86SAndroid Build Coastguard Worker HI 7296*7c356e86SAndroid Build Coastguard Worker 2 4 7297*7c356e86SAndroid Build Coastguard Worker--- 7298*7c356e86SAndroid Build Coastguard Workername: xxx-substitution-eval-order-2 7299*7c356e86SAndroid Build Coastguard Workerdescription: 7300*7c356e86SAndroid Build Coastguard Worker Check some corner cases 7301*7c356e86SAndroid Build Coastguard Workerstdin: 7302*7c356e86SAndroid Build Coastguard Worker unset var 7303*7c356e86SAndroid Build Coastguard Worker i=42 7304*7c356e86SAndroid Build Coastguard Worker : ${var+${q[i=777]}} required to be lazy by POSIX 7305*7c356e86SAndroid Build Coastguard Worker echo 1=$i 7306*7c356e86SAndroid Build Coastguard Worker var=meow 7307*7c356e86SAndroid Build Coastguard Worker i=42 7308*7c356e86SAndroid Build Coastguard Worker : ${var+${q[i=777]}} eval since var is now set 7309*7c356e86SAndroid Build Coastguard Worker echo 2=$i 7310*7c356e86SAndroid Build Coastguard Worker unset var 7311*7c356e86SAndroid Build Coastguard Worker i=42 7312*7c356e86SAndroid Build Coastguard Worker : ${var#${q[i=777]}} pattern is needed even if var is empty 7313*7c356e86SAndroid Build Coastguard Worker echo 3=$i 7314*7c356e86SAndroid Build Coastguard Worker var=meow 7315*7c356e86SAndroid Build Coastguard Worker i=42 7316*7c356e86SAndroid Build Coastguard Worker : ${var#${q[i=777]}} 7317*7c356e86SAndroid Build Coastguard Worker echo 4=$i 7318*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7319*7c356e86SAndroid Build Coastguard Worker 1=42 7320*7c356e86SAndroid Build Coastguard Worker 2=777 7321*7c356e86SAndroid Build Coastguard Worker 3=777 7322*7c356e86SAndroid Build Coastguard Worker 4=777 7323*7c356e86SAndroid Build Coastguard Worker--- 7324*7c356e86SAndroid Build Coastguard Workername: xxx-set-option-1 7325*7c356e86SAndroid Build Coastguard Workerdescription: 7326*7c356e86SAndroid Build Coastguard Worker Check option parsing in set 7327*7c356e86SAndroid Build Coastguard Workerstdin: 7328*7c356e86SAndroid Build Coastguard Worker set -vsA foo -- A 1 3 2 7329*7c356e86SAndroid Build Coastguard Worker echo ${foo[*]} 7330*7c356e86SAndroid Build Coastguard Workerexpected-stderr: 7331*7c356e86SAndroid Build Coastguard Worker echo ${foo[*]} 7332*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7333*7c356e86SAndroid Build Coastguard Worker 1 2 3 A 7334*7c356e86SAndroid Build Coastguard Worker--- 7335*7c356e86SAndroid Build Coastguard Workername: xxx-exec-1 7336*7c356e86SAndroid Build Coastguard Workerdescription: 7337*7c356e86SAndroid Build Coastguard Worker Check that exec exits for built-ins 7338*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 7339*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 7340*7c356e86SAndroid Build Coastguard Workerstdin: 7341*7c356e86SAndroid Build Coastguard Worker exec echo hi 7342*7c356e86SAndroid Build Coastguard Worker echo still herre 7343*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7344*7c356e86SAndroid Build Coastguard Worker hi 7345*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/ 7346*7c356e86SAndroid Build Coastguard Worker--- 7347*7c356e86SAndroid Build Coastguard Workername: xxx-while-1 7348*7c356e86SAndroid Build Coastguard Workerdescription: 7349*7c356e86SAndroid Build Coastguard Worker Check the return value of while loops 7350*7c356e86SAndroid Build Coastguard Worker XXX need to do same for for/select/until loops 7351*7c356e86SAndroid Build Coastguard Workerstdin: 7352*7c356e86SAndroid Build Coastguard Worker i=x 7353*7c356e86SAndroid Build Coastguard Worker while [ $i != xxx ] ; do 7354*7c356e86SAndroid Build Coastguard Worker i=x$i 7355*7c356e86SAndroid Build Coastguard Worker if [ $i = xxx ] ; then 7356*7c356e86SAndroid Build Coastguard Worker false 7357*7c356e86SAndroid Build Coastguard Worker continue 7358*7c356e86SAndroid Build Coastguard Worker fi 7359*7c356e86SAndroid Build Coastguard Worker done 7360*7c356e86SAndroid Build Coastguard Worker echo loop1=$? 7361*7c356e86SAndroid Build Coastguard Worker 7362*7c356e86SAndroid Build Coastguard Worker i=x 7363*7c356e86SAndroid Build Coastguard Worker while [ $i != xxx ] ; do 7364*7c356e86SAndroid Build Coastguard Worker i=x$i 7365*7c356e86SAndroid Build Coastguard Worker if [ $i = xxx ] ; then 7366*7c356e86SAndroid Build Coastguard Worker false 7367*7c356e86SAndroid Build Coastguard Worker break 7368*7c356e86SAndroid Build Coastguard Worker fi 7369*7c356e86SAndroid Build Coastguard Worker done 7370*7c356e86SAndroid Build Coastguard Worker echo loop2=$? 7371*7c356e86SAndroid Build Coastguard Worker 7372*7c356e86SAndroid Build Coastguard Worker i=x 7373*7c356e86SAndroid Build Coastguard Worker while [ $i != xxx ] ; do 7374*7c356e86SAndroid Build Coastguard Worker i=x$i 7375*7c356e86SAndroid Build Coastguard Worker false 7376*7c356e86SAndroid Build Coastguard Worker done 7377*7c356e86SAndroid Build Coastguard Worker echo loop3=$? 7378*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7379*7c356e86SAndroid Build Coastguard Worker loop1=0 7380*7c356e86SAndroid Build Coastguard Worker loop2=0 7381*7c356e86SAndroid Build Coastguard Worker loop3=1 7382*7c356e86SAndroid Build Coastguard Worker--- 7383*7c356e86SAndroid Build Coastguard Workername: xxx-status-1 7384*7c356e86SAndroid Build Coastguard Workerdescription: 7385*7c356e86SAndroid Build Coastguard Worker Check that blank lines don't clear $? 7386*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 7387*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 7388*7c356e86SAndroid Build Coastguard Workerstdin: 7389*7c356e86SAndroid Build Coastguard Worker (exit 1) 7390*7c356e86SAndroid Build Coastguard Worker echo $? 7391*7c356e86SAndroid Build Coastguard Worker (exit 1) 7392*7c356e86SAndroid Build Coastguard Worker 7393*7c356e86SAndroid Build Coastguard Worker echo $? 7394*7c356e86SAndroid Build Coastguard Worker true 7395*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7396*7c356e86SAndroid Build Coastguard Worker 1 7397*7c356e86SAndroid Build Coastguard Worker 1 7398*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*/ 7399*7c356e86SAndroid Build Coastguard Worker--- 7400*7c356e86SAndroid Build Coastguard Workername: xxx-status-2 7401*7c356e86SAndroid Build Coastguard Workerdescription: 7402*7c356e86SAndroid Build Coastguard Worker Check that $? is preserved in subshells, includes, traps. 7403*7c356e86SAndroid Build Coastguard Workerstdin: 7404*7c356e86SAndroid Build Coastguard Worker (exit 1) 7405*7c356e86SAndroid Build Coastguard Worker 7406*7c356e86SAndroid Build Coastguard Worker echo blank: $? 7407*7c356e86SAndroid Build Coastguard Worker 7408*7c356e86SAndroid Build Coastguard Worker (exit 2) 7409*7c356e86SAndroid Build Coastguard Worker (echo subshell: $?) 7410*7c356e86SAndroid Build Coastguard Worker 7411*7c356e86SAndroid Build Coastguard Worker echo 'echo include: $?' > foo 7412*7c356e86SAndroid Build Coastguard Worker (exit 3) 7413*7c356e86SAndroid Build Coastguard Worker . ./foo 7414*7c356e86SAndroid Build Coastguard Worker 7415*7c356e86SAndroid Build Coastguard Worker trap 'echo trap: $?' ERR 7416*7c356e86SAndroid Build Coastguard Worker (exit 4) 7417*7c356e86SAndroid Build Coastguard Worker echo exit: $? 7418*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7419*7c356e86SAndroid Build Coastguard Worker blank: 1 7420*7c356e86SAndroid Build Coastguard Worker subshell: 2 7421*7c356e86SAndroid Build Coastguard Worker include: 3 7422*7c356e86SAndroid Build Coastguard Worker trap: 4 7423*7c356e86SAndroid Build Coastguard Worker exit: 4 7424*7c356e86SAndroid Build Coastguard Worker--- 7425*7c356e86SAndroid Build Coastguard Workername: xxx-stat-1 7426*7c356e86SAndroid Build Coastguard Workerdescription: 7427*7c356e86SAndroid Build Coastguard Worker Check that tests on files are consistent 7428*7c356e86SAndroid Build Coastguard Worker (fails when run as root, unfortunately) 7429*7c356e86SAndroid Build Coastguard Workercategory: disabled 7430*7c356e86SAndroid Build Coastguard Workerstdin: 7431*7c356e86SAndroid Build Coastguard Worker mkdir a 7432*7c356e86SAndroid Build Coastguard Worker echo x >a/b 7433*7c356e86SAndroid Build Coastguard Worker test -e a/b; echo 1e $? . 7434*7c356e86SAndroid Build Coastguard Worker test -f a/b; echo 1f $? . 7435*7c356e86SAndroid Build Coastguard Worker chmod 0 a 7436*7c356e86SAndroid Build Coastguard Worker test -e a/b; echo 2e $? . 7437*7c356e86SAndroid Build Coastguard Worker test -f a/b; echo 2f $? . 7438*7c356e86SAndroid Build Coastguard Worker chmod 700 a 7439*7c356e86SAndroid Build Coastguard Worker test -e a/b; echo 3e $? . 7440*7c356e86SAndroid Build Coastguard Worker test -f a/b; echo 3f $? . 7441*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7442*7c356e86SAndroid Build Coastguard Worker 1e 0 . 7443*7c356e86SAndroid Build Coastguard Worker 1f 0 . 7444*7c356e86SAndroid Build Coastguard Worker 2e 1 . 7445*7c356e86SAndroid Build Coastguard Worker 2f 1 . 7446*7c356e86SAndroid Build Coastguard Worker 3e 0 . 7447*7c356e86SAndroid Build Coastguard Worker 3f 0 . 7448*7c356e86SAndroid Build Coastguard Worker--- 7449*7c356e86SAndroid Build Coastguard Workername: xxx-clean-chars-1 7450*7c356e86SAndroid Build Coastguard Workerdescription: 7451*7c356e86SAndroid Build Coastguard Worker Check MAGIC character is stuffed correctly 7452*7c356e86SAndroid Build Coastguard Workerstdin: 7453*7c356e86SAndroid Build Coastguard Worker echo `echo [�` 7454*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7455*7c356e86SAndroid Build Coastguard Worker [� 7456*7c356e86SAndroid Build Coastguard Worker--- 7457*7c356e86SAndroid Build Coastguard Workername: xxx-param-subst-qmark-1 7458*7c356e86SAndroid Build Coastguard Workerdescription: 7459*7c356e86SAndroid Build Coastguard Worker Check suppresion of error message with null string. According to 7460*7c356e86SAndroid Build Coastguard Worker POSIX, it shouldn't print the error as 'word' isn't omitted. 7461*7c356e86SAndroid Build Coastguard Worker ksh88/93, Solaris /bin/sh and /usr/xpg4/bin/sh all print the error. 7462*7c356e86SAndroid Build Coastguard Workerstdin: 7463*7c356e86SAndroid Build Coastguard Worker unset foo 7464*7c356e86SAndroid Build Coastguard Worker x= 7465*7c356e86SAndroid Build Coastguard Worker echo x${foo?$x} 7466*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 7467*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: !/not set/ 7468*7c356e86SAndroid Build Coastguard Worker--- 7469*7c356e86SAndroid Build Coastguard Workername: xxx-param-subst-qmark-namespec 7470*7c356e86SAndroid Build Coastguard Workerdescription: 7471*7c356e86SAndroid Build Coastguard Worker Check special names are output correctly 7472*7c356e86SAndroid Build Coastguard Workerstdin: 7473*7c356e86SAndroid Build Coastguard Worker doit() { 7474*7c356e86SAndroid Build Coastguard Worker "$__progname" -c "$@" >o1 2>o2 7475*7c356e86SAndroid Build Coastguard Worker rv=$? 7476*7c356e86SAndroid Build Coastguard Worker echo RETVAL: $rv 7477*7c356e86SAndroid Build Coastguard Worker sed -e "s^${__progname%.exe}\.*e*x*e*: PROG: " -e 's/^/STDOUT: /g' <o1 7478*7c356e86SAndroid Build Coastguard Worker sed -e "s^${__progname%.exe}\.*e*x*e*: PROG: " -e 's/^/STDERR: /g' <o2 7479*7c356e86SAndroid Build Coastguard Worker } 7480*7c356e86SAndroid Build Coastguard Worker doit 'echo ${1x}' 7481*7c356e86SAndroid Build Coastguard Worker doit 'echo "${1x}"' 7482*7c356e86SAndroid Build Coastguard Worker doit 'echo ${1?}' 7483*7c356e86SAndroid Build Coastguard Worker doit 'echo ${19?}' 7484*7c356e86SAndroid Build Coastguard Worker doit 'echo ${!:?}' 7485*7c356e86SAndroid Build Coastguard Worker doit -u 'echo ${*:?}' foo "" 7486*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7487*7c356e86SAndroid Build Coastguard Worker RETVAL: 1 7488*7c356e86SAndroid Build Coastguard Worker STDERR: PROG: ${1x}: bad substitution 7489*7c356e86SAndroid Build Coastguard Worker RETVAL: 1 7490*7c356e86SAndroid Build Coastguard Worker STDERR: PROG: ${1x}: bad substitution 7491*7c356e86SAndroid Build Coastguard Worker RETVAL: 1 7492*7c356e86SAndroid Build Coastguard Worker STDERR: PROG: 1: parameter null or not set 7493*7c356e86SAndroid Build Coastguard Worker RETVAL: 1 7494*7c356e86SAndroid Build Coastguard Worker STDERR: PROG: 19: parameter null or not set 7495*7c356e86SAndroid Build Coastguard Worker RETVAL: 1 7496*7c356e86SAndroid Build Coastguard Worker STDERR: PROG: !: parameter null or not set 7497*7c356e86SAndroid Build Coastguard Worker RETVAL: 1 7498*7c356e86SAndroid Build Coastguard Worker STDERR: foo: ${*:?}: bad substitution 7499*7c356e86SAndroid Build Coastguard Worker--- 7500*7c356e86SAndroid Build Coastguard Workername: xxx-param-_-1 7501*7c356e86SAndroid Build Coastguard Worker# fails due to weirdness of execv stuff 7502*7c356e86SAndroid Build Coastguard Workercategory: !os:uwin-nt 7503*7c356e86SAndroid Build Coastguard Workerdescription: 7504*7c356e86SAndroid Build Coastguard Worker Check c flag is set. 7505*7c356e86SAndroid Build Coastguard Workerarguments: !-c!echo "[$-]"! 7506*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern: /^\[.*c.*\]$/ 7507*7c356e86SAndroid Build Coastguard Worker--- 7508*7c356e86SAndroid Build Coastguard Workername: tilde-expand-1 7509*7c356e86SAndroid Build Coastguard Workerdescription: 7510*7c356e86SAndroid Build Coastguard Worker Check tilde expansion after equal signs 7511*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=/sweet! 7512*7c356e86SAndroid Build Coastguard Workerstdin: 7513*7c356e86SAndroid Build Coastguard Worker echo ${A=a=}~ b=~ c=d~ ~ 7514*7c356e86SAndroid Build Coastguard Worker export e=~ f=d~ 7515*7c356e86SAndroid Build Coastguard Worker command command export g=~ h=d~ 7516*7c356e86SAndroid Build Coastguard Worker echo ". $e . $f ." 7517*7c356e86SAndroid Build Coastguard Worker echo ". $g . $h ." 7518*7c356e86SAndroid Build Coastguard Worker set -o posix 7519*7c356e86SAndroid Build Coastguard Worker unset A e f g h 7520*7c356e86SAndroid Build Coastguard Worker echo ${A=a=}~ b=~ c=d~ ~ 7521*7c356e86SAndroid Build Coastguard Worker export e=~ f=d~ 7522*7c356e86SAndroid Build Coastguard Worker command command export g=~ h=d~ 7523*7c356e86SAndroid Build Coastguard Worker echo ". $e . $f ." 7524*7c356e86SAndroid Build Coastguard Worker echo ". $g . $h ." 7525*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7526*7c356e86SAndroid Build Coastguard Worker a=/sweet b=/sweet c=d~ /sweet 7527*7c356e86SAndroid Build Coastguard Worker . /sweet . d~ . 7528*7c356e86SAndroid Build Coastguard Worker . /sweet . d~ . 7529*7c356e86SAndroid Build Coastguard Worker a=~ b=~ c=d~ /sweet 7530*7c356e86SAndroid Build Coastguard Worker . /sweet . d~ . 7531*7c356e86SAndroid Build Coastguard Worker . /sweet . d~ . 7532*7c356e86SAndroid Build Coastguard Worker--- 7533*7c356e86SAndroid Build Coastguard Workername: tilde-expand-2 7534*7c356e86SAndroid Build Coastguard Workerdescription: 7535*7c356e86SAndroid Build Coastguard Worker Check tilde expansion works 7536*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=/sweet! 7537*7c356e86SAndroid Build Coastguard Workerstdin: 7538*7c356e86SAndroid Build Coastguard Worker :>'c=a' 7539*7c356e86SAndroid Build Coastguard Worker typeset c=[ab] 7540*7c356e86SAndroid Build Coastguard Worker :>'d=a' 7541*7c356e86SAndroid Build Coastguard Worker x=typeset; $x d=[ab] 7542*7c356e86SAndroid Build Coastguard Worker echo "<$c>" "<$d>" 7543*7c356e86SAndroid Build Coastguard Worker wd=$PWD 7544*7c356e86SAndroid Build Coastguard Worker cd / 7545*7c356e86SAndroid Build Coastguard Worker plus=$(print -r -- ~+) 7546*7c356e86SAndroid Build Coastguard Worker minus=$(print -r -- ~-) 7547*7c356e86SAndroid Build Coastguard Worker nix=$(print -r -- ~) 7548*7c356e86SAndroid Build Coastguard Worker [[ $plus = / ]]; echo one $? . 7549*7c356e86SAndroid Build Coastguard Worker [[ $minus = "$wd" ]]; echo two $? . 7550*7c356e86SAndroid Build Coastguard Worker [[ $nix = /sweet ]]; echo nix $? . 7551*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7552*7c356e86SAndroid Build Coastguard Worker <[ab]> <a> 7553*7c356e86SAndroid Build Coastguard Worker one 0 . 7554*7c356e86SAndroid Build Coastguard Worker two 0 . 7555*7c356e86SAndroid Build Coastguard Worker nix 0 . 7556*7c356e86SAndroid Build Coastguard Worker--- 7557*7c356e86SAndroid Build Coastguard Workername: tilde-expand-3 7558*7c356e86SAndroid Build Coastguard Workerdescription: 7559*7c356e86SAndroid Build Coastguard Worker Check mostly Austin 351 stuff 7560*7c356e86SAndroid Build Coastguard Workerstdin: 7561*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 7562*7c356e86SAndroid Build Coastguard Worker set "1 b=2" "3 d=4" 7563*7c356e86SAndroid Build Coastguard Worker export a=$1 \c=$2 7564*7c356e86SAndroid Build Coastguard Worker showargs 1 "$a" "$b" "$c" "$d" 7565*7c356e86SAndroid Build Coastguard Worker unset a b c d 7566*7c356e86SAndroid Build Coastguard Worker HOME=/tmp 7567*7c356e86SAndroid Build Coastguard Worker export \a=~ b=~ 7568*7c356e86SAndroid Build Coastguard Worker command export c=~ 7569*7c356e86SAndroid Build Coastguard Worker builtin export d=~ 7570*7c356e86SAndroid Build Coastguard Worker \\builtin export e=~ 7571*7c356e86SAndroid Build Coastguard Worker showargs 2 "$a" "$b" "$c" "$d" "$e" ksh 7572*7c356e86SAndroid Build Coastguard Worker unset a b c d e 7573*7c356e86SAndroid Build Coastguard Worker set -o posix 7574*7c356e86SAndroid Build Coastguard Worker export \a=~ b=~ 7575*7c356e86SAndroid Build Coastguard Worker command export c=~ 7576*7c356e86SAndroid Build Coastguard Worker builtin export d=~ 7577*7c356e86SAndroid Build Coastguard Worker \\builtin export e=~ 7578*7c356e86SAndroid Build Coastguard Worker showargs 3 "$a" "$b" "$c" "$d" "$e" posix 7579*7c356e86SAndroid Build Coastguard Worker unset a b c d e 7580*7c356e86SAndroid Build Coastguard Worker set +o posix 7581*7c356e86SAndroid Build Coastguard Worker export a=$1 7582*7c356e86SAndroid Build Coastguard Worker showargs 4 "$a" "$b" ksh 7583*7c356e86SAndroid Build Coastguard Worker unset a b 7584*7c356e86SAndroid Build Coastguard Worker showargs 5 a=$1 ksh 7585*7c356e86SAndroid Build Coastguard Worker export \a=$1 7586*7c356e86SAndroid Build Coastguard Worker showargs 6 "$a" "$b" ksh 7587*7c356e86SAndroid Build Coastguard Worker unset a b 7588*7c356e86SAndroid Build Coastguard Worker set -o posix 7589*7c356e86SAndroid Build Coastguard Worker export a=$1 7590*7c356e86SAndroid Build Coastguard Worker showargs 7 "$a" "$b" posix 7591*7c356e86SAndroid Build Coastguard Worker unset a b 7592*7c356e86SAndroid Build Coastguard Worker showargs 8 a=$1 posix 7593*7c356e86SAndroid Build Coastguard Worker export \a=$1 7594*7c356e86SAndroid Build Coastguard Worker showargs 9 "$a" "$b" posix 7595*7c356e86SAndroid Build Coastguard Worker unset a b 7596*7c356e86SAndroid Build Coastguard Worker set +o posix 7597*7c356e86SAndroid Build Coastguard Worker command echo 10 ksh a=~ 7598*7c356e86SAndroid Build Coastguard Worker command command export a=~ 7599*7c356e86SAndroid Build Coastguard Worker showargs 11 "$a" 7600*7c356e86SAndroid Build Coastguard Worker unset a 7601*7c356e86SAndroid Build Coastguard Worker set -o posix 7602*7c356e86SAndroid Build Coastguard Worker command echo 12 posix a=~ 7603*7c356e86SAndroid Build Coastguard Worker command command export a=~ 7604*7c356e86SAndroid Build Coastguard Worker showargs 13 "$a" 7605*7c356e86SAndroid Build Coastguard Worker unset a 7606*7c356e86SAndroid Build Coastguard Worker # unspecified whether /tmp or ~ 7607*7c356e86SAndroid Build Coastguard Worker var=export; command $var a=~ 7608*7c356e86SAndroid Build Coastguard Worker showargs 14 "$a" 7609*7c356e86SAndroid Build Coastguard Worker echo 'echo "<$foo>"' >bar 7610*7c356e86SAndroid Build Coastguard Worker "$__progname" bar 7611*7c356e86SAndroid Build Coastguard Worker var=foo 7612*7c356e86SAndroid Build Coastguard Worker export $var=1 7613*7c356e86SAndroid Build Coastguard Worker "$__progname" bar 7614*7c356e86SAndroid Build Coastguard Worker export $var=~ 7615*7c356e86SAndroid Build Coastguard Worker "$__progname" bar 7616*7c356e86SAndroid Build Coastguard Worker # unspecified 7617*7c356e86SAndroid Build Coastguard Worker command -- export a=~ 7618*7c356e86SAndroid Build Coastguard Worker showargs 18 "$a" 7619*7c356e86SAndroid Build Coastguard Worker set -A bla 7620*7c356e86SAndroid Build Coastguard Worker typeset bla[1]=~:~ 7621*7c356e86SAndroid Build Coastguard Worker typeset -g gbl=~ g2=$1 7622*7c356e86SAndroid Build Coastguard Worker local lcl=~ l2=$1 7623*7c356e86SAndroid Build Coastguard Worker readonly ro=~ r2=$1 7624*7c356e86SAndroid Build Coastguard Worker showargs 19 "${bla[1]}" a=~ "$gbl" "$lcl" "$ro" "$g2" "$l2" "$r2" 7625*7c356e86SAndroid Build Coastguard Worker set +o posix 7626*7c356e86SAndroid Build Coastguard Worker echo "20 some arbitrary stuff "=~ 7627*7c356e86SAndroid Build Coastguard Worker set -o posix 7628*7c356e86SAndroid Build Coastguard Worker echo "21 some arbitrary stuff "=~ 7629*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7630*7c356e86SAndroid Build Coastguard Worker <1> <1 b=2> <> <3> <4> . 7631*7c356e86SAndroid Build Coastguard Worker <2> </tmp> </tmp> </tmp> </tmp> </tmp> <ksh> . 7632*7c356e86SAndroid Build Coastguard Worker <3> <~> </tmp> </tmp> <~> </tmp> <posix> . 7633*7c356e86SAndroid Build Coastguard Worker <4> <1 b=2> <> <ksh> . 7634*7c356e86SAndroid Build Coastguard Worker <5> <a=1> <b=2> <ksh> . 7635*7c356e86SAndroid Build Coastguard Worker <6> <1> <2> <ksh> . 7636*7c356e86SAndroid Build Coastguard Worker <7> <1 b=2> <> <posix> . 7637*7c356e86SAndroid Build Coastguard Worker <8> <a=1> <b=2> <posix> . 7638*7c356e86SAndroid Build Coastguard Worker <9> <1> <2> <posix> . 7639*7c356e86SAndroid Build Coastguard Worker 10 ksh a=/tmp 7640*7c356e86SAndroid Build Coastguard Worker <11> </tmp> . 7641*7c356e86SAndroid Build Coastguard Worker 12 posix a=~ 7642*7c356e86SAndroid Build Coastguard Worker <13> </tmp> . 7643*7c356e86SAndroid Build Coastguard Worker <14> <~> . 7644*7c356e86SAndroid Build Coastguard Worker <> 7645*7c356e86SAndroid Build Coastguard Worker <1> 7646*7c356e86SAndroid Build Coastguard Worker <~> 7647*7c356e86SAndroid Build Coastguard Worker <18> <~> . 7648*7c356e86SAndroid Build Coastguard Worker <19> </tmp:/tmp> <a=~> </tmp> </tmp> </tmp> <1 b=2> <1 b=2> <1 b=2> . 7649*7c356e86SAndroid Build Coastguard Worker 20 some arbitrary stuff =/tmp 7650*7c356e86SAndroid Build Coastguard Worker 21 some arbitrary stuff =~ 7651*7c356e86SAndroid Build Coastguard Worker--- 7652*7c356e86SAndroid Build Coastguard Workername: exit-err-1 7653*7c356e86SAndroid Build Coastguard Workerdescription: 7654*7c356e86SAndroid Build Coastguard Worker Check some "exit on error" conditions 7655*7c356e86SAndroid Build Coastguard Workerstdin: 7656*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nexec "$1"' >env 7657*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nexit 1' >false 7658*7c356e86SAndroid Build Coastguard Worker chmod +x env false 7659*7c356e86SAndroid Build Coastguard Worker PATH=.$PATHSEP$PATH 7660*7c356e86SAndroid Build Coastguard Worker set -ex 7661*7c356e86SAndroid Build Coastguard Worker env false && echo something 7662*7c356e86SAndroid Build Coastguard Worker echo END 7663*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7664*7c356e86SAndroid Build Coastguard Worker END 7665*7c356e86SAndroid Build Coastguard Workerexpected-stderr: 7666*7c356e86SAndroid Build Coastguard Worker + env false 7667*7c356e86SAndroid Build Coastguard Worker + echo END 7668*7c356e86SAndroid Build Coastguard Worker--- 7669*7c356e86SAndroid Build Coastguard Workername: exit-err-2 7670*7c356e86SAndroid Build Coastguard Workerdescription: 7671*7c356e86SAndroid Build Coastguard Worker Check some "exit on error" edge conditions (POSIXly) 7672*7c356e86SAndroid Build Coastguard Workerstdin: 7673*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nexec "$1"' >env 7674*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nexit 1' >false 7675*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nexit 0' >true 7676*7c356e86SAndroid Build Coastguard Worker chmod +x env false 7677*7c356e86SAndroid Build Coastguard Worker PATH=.$PATHSEP$PATH 7678*7c356e86SAndroid Build Coastguard Worker set -ex 7679*7c356e86SAndroid Build Coastguard Worker if env true; then 7680*7c356e86SAndroid Build Coastguard Worker env false && echo something 7681*7c356e86SAndroid Build Coastguard Worker fi 7682*7c356e86SAndroid Build Coastguard Worker echo END 7683*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7684*7c356e86SAndroid Build Coastguard Worker END 7685*7c356e86SAndroid Build Coastguard Workerexpected-stderr: 7686*7c356e86SAndroid Build Coastguard Worker + env true 7687*7c356e86SAndroid Build Coastguard Worker + env false 7688*7c356e86SAndroid Build Coastguard Worker + echo END 7689*7c356e86SAndroid Build Coastguard Worker--- 7690*7c356e86SAndroid Build Coastguard Workername: exit-err-3 7691*7c356e86SAndroid Build Coastguard Workerdescription: 7692*7c356e86SAndroid Build Coastguard Worker pdksh regression which AT&T ksh does right 7693*7c356e86SAndroid Build Coastguard Worker TFM says: [set] -e | errexit 7694*7c356e86SAndroid Build Coastguard Worker Exit (after executing the ERR trap) ... 7695*7c356e86SAndroid Build Coastguard Workerstdin: 7696*7c356e86SAndroid Build Coastguard Worker trap 'echo EXIT' EXIT 7697*7c356e86SAndroid Build Coastguard Worker trap 'echo ERR' ERR 7698*7c356e86SAndroid Build Coastguard Worker set -e 7699*7c356e86SAndroid Build Coastguard Worker cd /XXXXX 2>/dev/null 7700*7c356e86SAndroid Build Coastguard Worker echo DONE 7701*7c356e86SAndroid Build Coastguard Worker exit 0 7702*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7703*7c356e86SAndroid Build Coastguard Worker ERR 7704*7c356e86SAndroid Build Coastguard Worker EXIT 7705*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 7706*7c356e86SAndroid Build Coastguard Worker--- 7707*7c356e86SAndroid Build Coastguard Workername: exit-err-4 7708*7c356e86SAndroid Build Coastguard Workerdescription: 7709*7c356e86SAndroid Build Coastguard Worker "set -e" test suite (POSIX) 7710*7c356e86SAndroid Build Coastguard Workerstdin: 7711*7c356e86SAndroid Build Coastguard Worker set -e 7712*7c356e86SAndroid Build Coastguard Worker echo pre 7713*7c356e86SAndroid Build Coastguard Worker if true ; then 7714*7c356e86SAndroid Build Coastguard Worker false && echo foo 7715*7c356e86SAndroid Build Coastguard Worker fi 7716*7c356e86SAndroid Build Coastguard Worker echo bar 7717*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7718*7c356e86SAndroid Build Coastguard Worker pre 7719*7c356e86SAndroid Build Coastguard Worker bar 7720*7c356e86SAndroid Build Coastguard Worker--- 7721*7c356e86SAndroid Build Coastguard Workername: exit-err-5 7722*7c356e86SAndroid Build Coastguard Workerdescription: 7723*7c356e86SAndroid Build Coastguard Worker "set -e" test suite (POSIX) 7724*7c356e86SAndroid Build Coastguard Workerstdin: 7725*7c356e86SAndroid Build Coastguard Worker set -e 7726*7c356e86SAndroid Build Coastguard Worker foo() { 7727*7c356e86SAndroid Build Coastguard Worker while [ "$1" ]; do 7728*7c356e86SAndroid Build Coastguard Worker for E in $x; do 7729*7c356e86SAndroid Build Coastguard Worker [ "$1" = "$E" ] && { shift ; continue 2 ; } 7730*7c356e86SAndroid Build Coastguard Worker done 7731*7c356e86SAndroid Build Coastguard Worker x="$x $1" 7732*7c356e86SAndroid Build Coastguard Worker shift 7733*7c356e86SAndroid Build Coastguard Worker done 7734*7c356e86SAndroid Build Coastguard Worker echo $x 7735*7c356e86SAndroid Build Coastguard Worker } 7736*7c356e86SAndroid Build Coastguard Worker echo pre 7737*7c356e86SAndroid Build Coastguard Worker foo a b b c 7738*7c356e86SAndroid Build Coastguard Worker echo post 7739*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7740*7c356e86SAndroid Build Coastguard Worker pre 7741*7c356e86SAndroid Build Coastguard Worker a b c 7742*7c356e86SAndroid Build Coastguard Worker post 7743*7c356e86SAndroid Build Coastguard Worker--- 7744*7c356e86SAndroid Build Coastguard Workername: exit-err-6 7745*7c356e86SAndroid Build Coastguard Workerdescription: 7746*7c356e86SAndroid Build Coastguard Worker "set -e" test suite (BSD make) 7747*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd 7748*7c356e86SAndroid Build Coastguard Workerstdin: 7749*7c356e86SAndroid Build Coastguard Worker mkdir zd zd/a zd/b 7750*7c356e86SAndroid Build Coastguard Worker print 'all:\n\t@echo eins\n\t@exit 42\n' >zd/a/Makefile 7751*7c356e86SAndroid Build Coastguard Worker print 'all:\n\t@echo zwei\n' >zd/b/Makefile 7752*7c356e86SAndroid Build Coastguard Worker wd=$(pwd) 7753*7c356e86SAndroid Build Coastguard Worker set -e 7754*7c356e86SAndroid Build Coastguard Worker for entry in a b; do ( set -e; if [[ -d $wd/zd/$entry.i386 ]]; then _newdir_="$entry.i386"; else _newdir_="$entry"; fi; if [[ -z $_THISDIR_ ]]; then _nextdir_="$_newdir_"; else _nextdir_="$_THISDIR_/$_newdir_"; fi; _makefile_spec_=; [[ ! -f $wd/zd/$_newdir_/Makefile.bsd-wrapper ]] || _makefile_spec_="-f Makefile.bsd-wrapper"; subskipdir=; for skipdir in ; do subentry=${skipdir#$entry}; if [[ $subentry != $skipdir ]]; then if [[ -z $subentry ]]; then echo "($_nextdir_ skipped)"; break; fi; subskipdir="$subskipdir ${subentry#/}"; fi; done; if [[ -z $skipdir || -n $subentry ]]; then echo "===> $_nextdir_"; cd $wd/zd/$_newdir_; make SKIPDIR="$subskipdir" $_makefile_spec_ _THISDIR_="$_nextdir_" all; fi; ) done 2>&1 | sed "s!$wd!WD!g" 7755*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7756*7c356e86SAndroid Build Coastguard Worker ===> a 7757*7c356e86SAndroid Build Coastguard Worker eins 7758*7c356e86SAndroid Build Coastguard Worker *** Error code 42 7759*7c356e86SAndroid Build Coastguard Worker 7760*7c356e86SAndroid Build Coastguard Worker Stop in WD/zd/a (line 2 of Makefile). 7761*7c356e86SAndroid Build Coastguard Worker--- 7762*7c356e86SAndroid Build Coastguard Workername: exit-err-7 7763*7c356e86SAndroid Build Coastguard Workerdescription: 7764*7c356e86SAndroid Build Coastguard Worker "set -e" regression (LP#1104543) 7765*7c356e86SAndroid Build Coastguard Workerstdin: 7766*7c356e86SAndroid Build Coastguard Worker set -e 7767*7c356e86SAndroid Build Coastguard Worker bla() { 7768*7c356e86SAndroid Build Coastguard Worker [ -x $PWD/nonexistant ] && $PWD/nonexistant 7769*7c356e86SAndroid Build Coastguard Worker } 7770*7c356e86SAndroid Build Coastguard Worker echo x 7771*7c356e86SAndroid Build Coastguard Worker bla 7772*7c356e86SAndroid Build Coastguard Worker echo y$? 7773*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7774*7c356e86SAndroid Build Coastguard Worker x 7775*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 7776*7c356e86SAndroid Build Coastguard Worker--- 7777*7c356e86SAndroid Build Coastguard Workername: exit-err-8 7778*7c356e86SAndroid Build Coastguard Workerdescription: 7779*7c356e86SAndroid Build Coastguard Worker "set -e" regression (Debian #700526) 7780*7c356e86SAndroid Build Coastguard Workerstdin: 7781*7c356e86SAndroid Build Coastguard Worker set -e 7782*7c356e86SAndroid Build Coastguard Worker _db_cmd() { return $1; } 7783*7c356e86SAndroid Build Coastguard Worker db_input() { _db_cmd 30; } 7784*7c356e86SAndroid Build Coastguard Worker db_go() { _db_cmd 0; } 7785*7c356e86SAndroid Build Coastguard Worker db_input || : 7786*7c356e86SAndroid Build Coastguard Worker db_go 7787*7c356e86SAndroid Build Coastguard Worker exit 0 7788*7c356e86SAndroid Build Coastguard Worker--- 7789*7c356e86SAndroid Build Coastguard Workername: exit-err-9 7790*7c356e86SAndroid Build Coastguard Workerdescription: 7791*7c356e86SAndroid Build Coastguard Worker "set -e" versus bang pipelines 7792*7c356e86SAndroid Build Coastguard Workerstdin: 7793*7c356e86SAndroid Build Coastguard Worker set -e 7794*7c356e86SAndroid Build Coastguard Worker ! false | false 7795*7c356e86SAndroid Build Coastguard Worker echo 1 ok 7796*7c356e86SAndroid Build Coastguard Worker ! false && false 7797*7c356e86SAndroid Build Coastguard Worker echo 2 wrong 7798*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7799*7c356e86SAndroid Build Coastguard Worker 1 ok 7800*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 7801*7c356e86SAndroid Build Coastguard Worker--- 7802*7c356e86SAndroid Build Coastguard Workername: exit-err-10 7803*7c356e86SAndroid Build Coastguard Workerdescription: 7804*7c356e86SAndroid Build Coastguard Worker Debian #269067 (cf. regression-38 but with eval) 7805*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 7806*7c356e86SAndroid Build Coastguard Workerstdin: 7807*7c356e86SAndroid Build Coastguard Worker eval false || true 7808*7c356e86SAndroid Build Coastguard Worker echo = $? . 7809*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7810*7c356e86SAndroid Build Coastguard Worker = 0 . 7811*7c356e86SAndroid Build Coastguard Worker--- 7812*7c356e86SAndroid Build Coastguard Workername: exit-err-11 7813*7c356e86SAndroid Build Coastguard Workerdescription: 7814*7c356e86SAndroid Build Coastguard Worker Fix -e inside eval, from Martijn Dekker; expected-stdout from ksh93 7815*7c356e86SAndroid Build Coastguard Workerstdin: 7816*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'eval '\''echo ${-//[!eh]}; false; echo phantom e'\''; echo x$?' 7817*7c356e86SAndroid Build Coastguard Worker echo = $? 7818*7c356e86SAndroid Build Coastguard Worker "$__progname" -ec 'eval '\''echo ${-//[!eh]}; false; echo phantom e'\''; echo x$?' 7819*7c356e86SAndroid Build Coastguard Worker echo = $? 7820*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7821*7c356e86SAndroid Build Coastguard Worker h 7822*7c356e86SAndroid Build Coastguard Worker phantom e 7823*7c356e86SAndroid Build Coastguard Worker x0 7824*7c356e86SAndroid Build Coastguard Worker = 0 7825*7c356e86SAndroid Build Coastguard Worker eh 7826*7c356e86SAndroid Build Coastguard Worker = 1 7827*7c356e86SAndroid Build Coastguard Worker--- 7828*7c356e86SAndroid Build Coastguard Workername: exit-enoent-1 7829*7c356e86SAndroid Build Coastguard Workerdescription: 7830*7c356e86SAndroid Build Coastguard Worker SUSv4 says that the shell should exit with 126/127 in some situations 7831*7c356e86SAndroid Build Coastguard Workerstdin: 7832*7c356e86SAndroid Build Coastguard Worker i=0 7833*7c356e86SAndroid Build Coastguard Worker (echo; echo :) >x 7834*7c356e86SAndroid Build Coastguard Worker "$__progname" ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r . 7835*7c356e86SAndroid Build Coastguard Worker "$__progname" -c ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r . 7836*7c356e86SAndroid Build Coastguard Worker echo exit 42 >x 7837*7c356e86SAndroid Build Coastguard Worker "$__progname" ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r . 7838*7c356e86SAndroid Build Coastguard Worker "$__progname" -c ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r . 7839*7c356e86SAndroid Build Coastguard Worker rm -f x 7840*7c356e86SAndroid Build Coastguard Worker "$__progname" ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r . 7841*7c356e86SAndroid Build Coastguard Worker "$__progname" -c ./x >/dev/null 2>&1; r=$?; echo $((i++)) $r . 7842*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7843*7c356e86SAndroid Build Coastguard Worker 0 0 . 7844*7c356e86SAndroid Build Coastguard Worker 1 126 . 7845*7c356e86SAndroid Build Coastguard Worker 2 42 . 7846*7c356e86SAndroid Build Coastguard Worker 3 126 . 7847*7c356e86SAndroid Build Coastguard Worker 4 127 . 7848*7c356e86SAndroid Build Coastguard Worker 5 127 . 7849*7c356e86SAndroid Build Coastguard Worker--- 7850*7c356e86SAndroid Build Coastguard Workername: exit-eval-1 7851*7c356e86SAndroid Build Coastguard Workerdescription: 7852*7c356e86SAndroid Build Coastguard Worker Check eval vs substitution exit codes (ksh93 alike) 7853*7c356e86SAndroid Build Coastguard Workerstdin: 7854*7c356e86SAndroid Build Coastguard Worker (exit 12) 7855*7c356e86SAndroid Build Coastguard Worker eval $(false) 7856*7c356e86SAndroid Build Coastguard Worker echo A $? 7857*7c356e86SAndroid Build Coastguard Worker (exit 12) 7858*7c356e86SAndroid Build Coastguard Worker eval ' $(false)' 7859*7c356e86SAndroid Build Coastguard Worker echo B $? 7860*7c356e86SAndroid Build Coastguard Worker (exit 12) 7861*7c356e86SAndroid Build Coastguard Worker eval " $(false)" 7862*7c356e86SAndroid Build Coastguard Worker echo C $? 7863*7c356e86SAndroid Build Coastguard Worker (exit 12) 7864*7c356e86SAndroid Build Coastguard Worker eval "eval $(false)" 7865*7c356e86SAndroid Build Coastguard Worker echo D $? 7866*7c356e86SAndroid Build Coastguard Worker (exit 12) 7867*7c356e86SAndroid Build Coastguard Worker eval 'eval '"$(false)" 7868*7c356e86SAndroid Build Coastguard Worker echo E $? 7869*7c356e86SAndroid Build Coastguard Worker IFS="$IFS:" 7870*7c356e86SAndroid Build Coastguard Worker (exit 12) 7871*7c356e86SAndroid Build Coastguard Worker eval $(echo :; false) 7872*7c356e86SAndroid Build Coastguard Worker echo F $? 7873*7c356e86SAndroid Build Coastguard Worker echo -n "G " 7874*7c356e86SAndroid Build Coastguard Worker (exit 12) 7875*7c356e86SAndroid Build Coastguard Worker eval 'echo $?' 7876*7c356e86SAndroid Build Coastguard Worker echo H $? 7877*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7878*7c356e86SAndroid Build Coastguard Worker A 0 7879*7c356e86SAndroid Build Coastguard Worker B 1 7880*7c356e86SAndroid Build Coastguard Worker C 0 7881*7c356e86SAndroid Build Coastguard Worker D 0 7882*7c356e86SAndroid Build Coastguard Worker E 0 7883*7c356e86SAndroid Build Coastguard Worker F 0 7884*7c356e86SAndroid Build Coastguard Worker G 12 7885*7c356e86SAndroid Build Coastguard Worker H 0 7886*7c356e86SAndroid Build Coastguard Worker--- 7887*7c356e86SAndroid Build Coastguard Workername: exit-trap-1 7888*7c356e86SAndroid Build Coastguard Workerdescription: 7889*7c356e86SAndroid Build Coastguard Worker Check that "exit" with no arguments behaves SUSv4 conformant. 7890*7c356e86SAndroid Build Coastguard Workerstdin: 7891*7c356e86SAndroid Build Coastguard Worker trap 'echo hi; exit' EXIT 7892*7c356e86SAndroid Build Coastguard Worker exit 9 7893*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7894*7c356e86SAndroid Build Coastguard Worker hi 7895*7c356e86SAndroid Build Coastguard Workerexpected-exit: 9 7896*7c356e86SAndroid Build Coastguard Worker--- 7897*7c356e86SAndroid Build Coastguard Workername: exit-trap-2 7898*7c356e86SAndroid Build Coastguard Workerdescription: 7899*7c356e86SAndroid Build Coastguard Worker Check that ERR and EXIT traps are run just like GNU bash does. 7900*7c356e86SAndroid Build Coastguard Worker ksh93 runs ERtrap after “parameter null or not set” (which mksh 7901*7c356e86SAndroid Build Coastguard Worker used to do) but (bug) continues “and out”, exit 0, in +e eval-undef. 7902*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "x" 7903*7c356e86SAndroid Build Coastguard Worker v=; unset v 7904*7c356e86SAndroid Build Coastguard Worker trap 'echo EXtrap' EXIT 7905*7c356e86SAndroid Build Coastguard Worker trap 'echo ERtrap' ERR 7906*7c356e86SAndroid Build Coastguard Worker set $1 7907*7c356e86SAndroid Build Coastguard Worker echo "and run $2" 7908*7c356e86SAndroid Build Coastguard Worker eval $2 7909*7c356e86SAndroid Build Coastguard Worker echo and out 7910*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "xt" 7911*7c356e86SAndroid Build Coastguard Worker v=; unset v 7912*7c356e86SAndroid Build Coastguard Worker trap 'echo EXtrap' EXIT 7913*7c356e86SAndroid Build Coastguard Worker trap 'echo ERtrap' ERR 7914*7c356e86SAndroid Build Coastguard Worker set $1 7915*7c356e86SAndroid Build Coastguard Worker echo 'and run true' 7916*7c356e86SAndroid Build Coastguard Worker true 7917*7c356e86SAndroid Build Coastguard Worker echo and out 7918*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "xf" 7919*7c356e86SAndroid Build Coastguard Worker v=; unset v 7920*7c356e86SAndroid Build Coastguard Worker trap 'echo EXtrap' EXIT 7921*7c356e86SAndroid Build Coastguard Worker trap 'echo ERtrap' ERR 7922*7c356e86SAndroid Build Coastguard Worker set $1 7923*7c356e86SAndroid Build Coastguard Worker echo 'and run false' 7924*7c356e86SAndroid Build Coastguard Worker false 7925*7c356e86SAndroid Build Coastguard Worker echo and out 7926*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "xu" 7927*7c356e86SAndroid Build Coastguard Worker v=; unset v 7928*7c356e86SAndroid Build Coastguard Worker trap 'echo EXtrap' EXIT 7929*7c356e86SAndroid Build Coastguard Worker trap 'echo ERtrap' ERR 7930*7c356e86SAndroid Build Coastguard Worker set $1 7931*7c356e86SAndroid Build Coastguard Worker echo 'and run ${v?}' 7932*7c356e86SAndroid Build Coastguard Worker ${v?} 7933*7c356e86SAndroid Build Coastguard Worker echo and out 7934*7c356e86SAndroid Build Coastguard Workerstdin: 7935*7c356e86SAndroid Build Coastguard Worker runtest() { 7936*7c356e86SAndroid Build Coastguard Worker rm -f rc 7937*7c356e86SAndroid Build Coastguard Worker ( 7938*7c356e86SAndroid Build Coastguard Worker "$__progname" "$@" 7939*7c356e86SAndroid Build Coastguard Worker echo $? >rc 7940*7c356e86SAndroid Build Coastguard Worker ) 2>&1 | sed \ 7941*7c356e86SAndroid Build Coastguard Worker -e 's/parameter not set/parameter null or not set/' \ 7942*7c356e86SAndroid Build Coastguard Worker -e 's/[[]6]//' -e 's/: eval: line 1//' -e 's/: line 6//' \ 7943*7c356e86SAndroid Build Coastguard Worker -e "s^${__progname%.exe}\.*e*x*e*: <stdin>\[[0-9]*]PROG" 7944*7c356e86SAndroid Build Coastguard Worker } 7945*7c356e86SAndroid Build Coastguard Worker xe=-e 7946*7c356e86SAndroid Build Coastguard Worker echo : $xe 7947*7c356e86SAndroid Build Coastguard Worker runtest x $xe true 7948*7c356e86SAndroid Build Coastguard Worker echo = eval-true $(<rc) . 7949*7c356e86SAndroid Build Coastguard Worker runtest x $xe false 7950*7c356e86SAndroid Build Coastguard Worker echo = eval-false $(<rc) . 7951*7c356e86SAndroid Build Coastguard Worker runtest x $xe '${v?}' 7952*7c356e86SAndroid Build Coastguard Worker echo = eval-undef $(<rc) . 7953*7c356e86SAndroid Build Coastguard Worker runtest xt $xe 7954*7c356e86SAndroid Build Coastguard Worker echo = noeval-true $(<rc) . 7955*7c356e86SAndroid Build Coastguard Worker runtest xf $xe 7956*7c356e86SAndroid Build Coastguard Worker echo = noeval-false $(<rc) . 7957*7c356e86SAndroid Build Coastguard Worker runtest xu $xe 7958*7c356e86SAndroid Build Coastguard Worker echo = noeval-undef $(<rc) . 7959*7c356e86SAndroid Build Coastguard Worker xe=+e 7960*7c356e86SAndroid Build Coastguard Worker echo : $xe 7961*7c356e86SAndroid Build Coastguard Worker runtest x $xe true 7962*7c356e86SAndroid Build Coastguard Worker echo = eval-true $(<rc) . 7963*7c356e86SAndroid Build Coastguard Worker runtest x $xe false 7964*7c356e86SAndroid Build Coastguard Worker echo = eval-false $(<rc) . 7965*7c356e86SAndroid Build Coastguard Worker runtest x $xe '${v?}' 7966*7c356e86SAndroid Build Coastguard Worker echo = eval-undef $(<rc) . 7967*7c356e86SAndroid Build Coastguard Worker runtest xt $xe 7968*7c356e86SAndroid Build Coastguard Worker echo = noeval-true $(<rc) . 7969*7c356e86SAndroid Build Coastguard Worker runtest xf $xe 7970*7c356e86SAndroid Build Coastguard Worker echo = noeval-false $(<rc) . 7971*7c356e86SAndroid Build Coastguard Worker runtest xu $xe 7972*7c356e86SAndroid Build Coastguard Worker echo = noeval-undef $(<rc) . 7973*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 7974*7c356e86SAndroid Build Coastguard Worker : -e 7975*7c356e86SAndroid Build Coastguard Worker and run true 7976*7c356e86SAndroid Build Coastguard Worker and out 7977*7c356e86SAndroid Build Coastguard Worker EXtrap 7978*7c356e86SAndroid Build Coastguard Worker = eval-true 0 . 7979*7c356e86SAndroid Build Coastguard Worker and run false 7980*7c356e86SAndroid Build Coastguard Worker ERtrap 7981*7c356e86SAndroid Build Coastguard Worker EXtrap 7982*7c356e86SAndroid Build Coastguard Worker = eval-false 1 . 7983*7c356e86SAndroid Build Coastguard Worker and run ${v?} 7984*7c356e86SAndroid Build Coastguard Worker x: v: parameter null or not set 7985*7c356e86SAndroid Build Coastguard Worker EXtrap 7986*7c356e86SAndroid Build Coastguard Worker = eval-undef 1 . 7987*7c356e86SAndroid Build Coastguard Worker and run true 7988*7c356e86SAndroid Build Coastguard Worker and out 7989*7c356e86SAndroid Build Coastguard Worker EXtrap 7990*7c356e86SAndroid Build Coastguard Worker = noeval-true 0 . 7991*7c356e86SAndroid Build Coastguard Worker and run false 7992*7c356e86SAndroid Build Coastguard Worker ERtrap 7993*7c356e86SAndroid Build Coastguard Worker EXtrap 7994*7c356e86SAndroid Build Coastguard Worker = noeval-false 1 . 7995*7c356e86SAndroid Build Coastguard Worker and run ${v?} 7996*7c356e86SAndroid Build Coastguard Worker xu: v: parameter null or not set 7997*7c356e86SAndroid Build Coastguard Worker EXtrap 7998*7c356e86SAndroid Build Coastguard Worker = noeval-undef 1 . 7999*7c356e86SAndroid Build Coastguard Worker : +e 8000*7c356e86SAndroid Build Coastguard Worker and run true 8001*7c356e86SAndroid Build Coastguard Worker and out 8002*7c356e86SAndroid Build Coastguard Worker EXtrap 8003*7c356e86SAndroid Build Coastguard Worker = eval-true 0 . 8004*7c356e86SAndroid Build Coastguard Worker and run false 8005*7c356e86SAndroid Build Coastguard Worker ERtrap 8006*7c356e86SAndroid Build Coastguard Worker ERtrap 8007*7c356e86SAndroid Build Coastguard Worker and out 8008*7c356e86SAndroid Build Coastguard Worker EXtrap 8009*7c356e86SAndroid Build Coastguard Worker = eval-false 0 . 8010*7c356e86SAndroid Build Coastguard Worker and run ${v?} 8011*7c356e86SAndroid Build Coastguard Worker x: v: parameter null or not set 8012*7c356e86SAndroid Build Coastguard Worker EXtrap 8013*7c356e86SAndroid Build Coastguard Worker = eval-undef 1 . 8014*7c356e86SAndroid Build Coastguard Worker and run true 8015*7c356e86SAndroid Build Coastguard Worker and out 8016*7c356e86SAndroid Build Coastguard Worker EXtrap 8017*7c356e86SAndroid Build Coastguard Worker = noeval-true 0 . 8018*7c356e86SAndroid Build Coastguard Worker and run false 8019*7c356e86SAndroid Build Coastguard Worker ERtrap 8020*7c356e86SAndroid Build Coastguard Worker and out 8021*7c356e86SAndroid Build Coastguard Worker EXtrap 8022*7c356e86SAndroid Build Coastguard Worker = noeval-false 0 . 8023*7c356e86SAndroid Build Coastguard Worker and run ${v?} 8024*7c356e86SAndroid Build Coastguard Worker xu: v: parameter null or not set 8025*7c356e86SAndroid Build Coastguard Worker EXtrap 8026*7c356e86SAndroid Build Coastguard Worker = noeval-undef 1 . 8027*7c356e86SAndroid Build Coastguard Worker--- 8028*7c356e86SAndroid Build Coastguard Workername: exit-trap-3 8029*7c356e86SAndroid Build Coastguard Workerdescription: 8030*7c356e86SAndroid Build Coastguard Worker Check that the EXIT trap is run in many places, Debian #910276 8031*7c356e86SAndroid Build Coastguard Workerstdin: 8032*7c356e86SAndroid Build Coastguard Worker fkt() { 8033*7c356e86SAndroid Build Coastguard Worker trap -- "echo $1 >&2" EXIT 8034*7c356e86SAndroid Build Coastguard Worker } 8035*7c356e86SAndroid Build Coastguard Worker fkt shell_exit 8036*7c356e86SAndroid Build Coastguard Worker $(fkt fn_exit) 8037*7c356e86SAndroid Build Coastguard Worker $(trap -- "echo comsub_exit >&2" EXIT) 8038*7c356e86SAndroid Build Coastguard Worker (trap -- "echo subshell_exit >&2" EXIT) 8039*7c356e86SAndroid Build Coastguard Workerexpected-stderr: 8040*7c356e86SAndroid Build Coastguard Worker fn_exit 8041*7c356e86SAndroid Build Coastguard Worker comsub_exit 8042*7c356e86SAndroid Build Coastguard Worker subshell_exit 8043*7c356e86SAndroid Build Coastguard Worker shell_exit 8044*7c356e86SAndroid Build Coastguard Worker--- 8045*7c356e86SAndroid Build Coastguard Workername: exit-trap-interactive 8046*7c356e86SAndroid Build Coastguard Workerdescription: 8047*7c356e86SAndroid Build Coastguard Worker Check that interactive shell doesn't exit via EXIT trap on syntax error 8048*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 8049*7c356e86SAndroid Build Coastguard Workerstdin: 8050*7c356e86SAndroid Build Coastguard Worker trap -- EXIT 8051*7c356e86SAndroid Build Coastguard Worker echo Syntax error < 8052*7c356e86SAndroid Build Coastguard Worker echo 'After error 1' 8053*7c356e86SAndroid Build Coastguard Worker trap 'echo Exit trap' EXIT 8054*7c356e86SAndroid Build Coastguard Worker echo Syntax error < 8055*7c356e86SAndroid Build Coastguard Worker echo 'After error 2' 8056*7c356e86SAndroid Build Coastguard Worker trap 'echo Exit trap' EXIT 8057*7c356e86SAndroid Build Coastguard Worker exit 8058*7c356e86SAndroid Build Coastguard Worker echo 'After exit' 8059*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8060*7c356e86SAndroid Build Coastguard Worker After error 1 8061*7c356e86SAndroid Build Coastguard Worker After error 2 8062*7c356e86SAndroid Build Coastguard Worker Exit trap 8063*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 8064*7c356e86SAndroid Build Coastguard Worker /syntax error: unexpected 'newline'/ 8065*7c356e86SAndroid Build Coastguard Worker--- 8066*7c356e86SAndroid Build Coastguard Workername: test-stlt-1 8067*7c356e86SAndroid Build Coastguard Workerdescription: 8068*7c356e86SAndroid Build Coastguard Worker Check that test also can handle string1 < string2 etc. 8069*7c356e86SAndroid Build Coastguard Workerstdin: 8070*7c356e86SAndroid Build Coastguard Worker test 2005/10/08 '<' 2005/08/21 && echo ja || echo nein 8071*7c356e86SAndroid Build Coastguard Worker test 2005/08/21 \< 2005/10/08 && echo ja || echo nein 8072*7c356e86SAndroid Build Coastguard Worker test 2005/10/08 '>' 2005/08/21 && echo ja || echo nein 8073*7c356e86SAndroid Build Coastguard Worker test 2005/08/21 \> 2005/10/08 && echo ja || echo nein 8074*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8075*7c356e86SAndroid Build Coastguard Worker nein 8076*7c356e86SAndroid Build Coastguard Worker ja 8077*7c356e86SAndroid Build Coastguard Worker ja 8078*7c356e86SAndroid Build Coastguard Worker nein 8079*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: !/unexpected op/ 8080*7c356e86SAndroid Build Coastguard Worker--- 8081*7c356e86SAndroid Build Coastguard Workername: test-str-pattern 8082*7c356e86SAndroid Build Coastguard Workerdescription: 8083*7c356e86SAndroid Build Coastguard Worker Check that [[ x = $y ]] can take extglobs, like ksh93 8084*7c356e86SAndroid Build Coastguard Workerstdin: 8085*7c356e86SAndroid Build Coastguard Worker [[ -n $BASH_VERSION ]] && shopt -s extglob 8086*7c356e86SAndroid Build Coastguard Worker function one { 8087*7c356e86SAndroid Build Coastguard Worker n=$1 x=$2 y=$3 z=${4:-$3} 8088*7c356e86SAndroid Build Coastguard Worker [[ $x = $y ]]; a=$? 8089*7c356e86SAndroid Build Coastguard Worker [[ $x = "$y" ]]; b=$? 8090*7c356e86SAndroid Build Coastguard Worker eval '[[ $x = '"$z"' ]]; c=$?' 8091*7c356e86SAndroid Build Coastguard Worker eval '[[ $x = "'"$z"'" ]]; d=$?' 8092*7c356e86SAndroid Build Coastguard Worker echo $n $a $b $c $d . 8093*7c356e86SAndroid Build Coastguard Worker } 8094*7c356e86SAndroid Build Coastguard Worker x='a\' 8095*7c356e86SAndroid Build Coastguard Worker [[ $x = a\ ]]; echo 01 $? . 8096*7c356e86SAndroid Build Coastguard Worker [[ $x = a\\ ]]; echo 02 $? . 8097*7c356e86SAndroid Build Coastguard Worker one 03 'a\' 'a\' 'a\\' 8098*7c356e86SAndroid Build Coastguard Worker one 04 'a\b' 'a\b' 8099*7c356e86SAndroid Build Coastguard Worker one 05 'a\b' 'a\\b' 8100*7c356e86SAndroid Build Coastguard Worker one 06 'foo' 'f+(o)' 8101*7c356e86SAndroid Build Coastguard Worker one 07 'f+(o)' 'f+(o)' 8102*7c356e86SAndroid Build Coastguard Worker one 08 'f+(o' 'f+(o' 'f+\(o' 8103*7c356e86SAndroid Build Coastguard Worker one 09 foo 'f+(o' 'f+\(o' 8104*7c356e86SAndroid Build Coastguard Worker one 10 abcde 'a\*e' 8105*7c356e86SAndroid Build Coastguard Worker one 11 'a*e' 'a\*e' 8106*7c356e86SAndroid Build Coastguard Worker one 12 'a\*e' 'a\*e' 8107*7c356e86SAndroid Build Coastguard Worker echo extras: 8108*7c356e86SAndroid Build Coastguard Worker x='f+(o' 8109*7c356e86SAndroid Build Coastguard Worker z='f+(o' 8110*7c356e86SAndroid Build Coastguard Worker eval '[[ $x = "'"$z"'" ]]; echo 14 $? "(08:4)" .' 8111*7c356e86SAndroid Build Coastguard Worker x=foo 8112*7c356e86SAndroid Build Coastguard Worker eval '[[ $x = "'"$z"'" ]]; echo 15 $? "(09:4)" .' 8113*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8114*7c356e86SAndroid Build Coastguard Worker 01 1 . 8115*7c356e86SAndroid Build Coastguard Worker 02 0 . 8116*7c356e86SAndroid Build Coastguard Worker 03 0 0 0 0 . 8117*7c356e86SAndroid Build Coastguard Worker 04 1 0 1 0 . 8118*7c356e86SAndroid Build Coastguard Worker 05 0 1 0 0 . 8119*7c356e86SAndroid Build Coastguard Worker 06 0 1 0 1 . 8120*7c356e86SAndroid Build Coastguard Worker 07 1 0 1 0 . 8121*7c356e86SAndroid Build Coastguard Worker 08 0 0 0 1 . 8122*7c356e86SAndroid Build Coastguard Worker 09 1 1 1 1 . 8123*7c356e86SAndroid Build Coastguard Worker 10 1 1 1 1 . 8124*7c356e86SAndroid Build Coastguard Worker 11 0 1 0 1 . 8125*7c356e86SAndroid Build Coastguard Worker 12 1 0 1 0 . 8126*7c356e86SAndroid Build Coastguard Worker extras: 8127*7c356e86SAndroid Build Coastguard Worker 14 0 (08:4) . 8128*7c356e86SAndroid Build Coastguard Worker 15 1 (09:4) . 8129*7c356e86SAndroid Build Coastguard Worker--- 8130*7c356e86SAndroid Build Coastguard Workername: test-precedence-1 8131*7c356e86SAndroid Build Coastguard Workerdescription: 8132*7c356e86SAndroid Build Coastguard Worker Check a weird precedence case (and POSIX echo) 8133*7c356e86SAndroid Build Coastguard Workerstdin: 8134*7c356e86SAndroid Build Coastguard Worker test \( -f = -f \) 8135*7c356e86SAndroid Build Coastguard Worker rv=$? 8136*7c356e86SAndroid Build Coastguard Worker echo $rv 8137*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8138*7c356e86SAndroid Build Coastguard Worker 0 8139*7c356e86SAndroid Build Coastguard Worker--- 8140*7c356e86SAndroid Build Coastguard Workername: test-option-1 8141*7c356e86SAndroid Build Coastguard Workerdescription: 8142*7c356e86SAndroid Build Coastguard Worker Test the test -o operator 8143*7c356e86SAndroid Build Coastguard Workerstdin: 8144*7c356e86SAndroid Build Coastguard Worker runtest() { 8145*7c356e86SAndroid Build Coastguard Worker test -o $1; echo $? 8146*7c356e86SAndroid Build Coastguard Worker [ -o $1 ]; echo $? 8147*7c356e86SAndroid Build Coastguard Worker [[ -o $1 ]]; echo $? 8148*7c356e86SAndroid Build Coastguard Worker } 8149*7c356e86SAndroid Build Coastguard Worker if_test() { 8150*7c356e86SAndroid Build Coastguard Worker test -o $1 -o -o !$1; echo $? 8151*7c356e86SAndroid Build Coastguard Worker [ -o $1 -o -o !$1 ]; echo $? 8152*7c356e86SAndroid Build Coastguard Worker [[ -o $1 || -o !$1 ]]; echo $? 8153*7c356e86SAndroid Build Coastguard Worker test -o ?$1; echo $? 8154*7c356e86SAndroid Build Coastguard Worker } 8155*7c356e86SAndroid Build Coastguard Worker echo 0y $(if_test utf8-mode) = 8156*7c356e86SAndroid Build Coastguard Worker echo 0n $(if_test utf8-hack) = 8157*7c356e86SAndroid Build Coastguard Worker echo 1= $(runtest utf8-hack) = 8158*7c356e86SAndroid Build Coastguard Worker echo 2= $(runtest !utf8-hack) = 8159*7c356e86SAndroid Build Coastguard Worker echo 3= $(runtest ?utf8-hack) = 8160*7c356e86SAndroid Build Coastguard Worker set +U 8161*7c356e86SAndroid Build Coastguard Worker echo 1+ $(runtest utf8-mode) = 8162*7c356e86SAndroid Build Coastguard Worker echo 2+ $(runtest !utf8-mode) = 8163*7c356e86SAndroid Build Coastguard Worker echo 3+ $(runtest ?utf8-mode) = 8164*7c356e86SAndroid Build Coastguard Worker set -U 8165*7c356e86SAndroid Build Coastguard Worker echo 1- $(runtest utf8-mode) = 8166*7c356e86SAndroid Build Coastguard Worker echo 2- $(runtest !utf8-mode) = 8167*7c356e86SAndroid Build Coastguard Worker echo 3- $(runtest ?utf8-mode) = 8168*7c356e86SAndroid Build Coastguard Worker echo = short flags = 8169*7c356e86SAndroid Build Coastguard Worker echo 0y $(if_test -U) = 8170*7c356e86SAndroid Build Coastguard Worker echo 0y $(if_test +U) = 8171*7c356e86SAndroid Build Coastguard Worker echo 0n $(if_test -_) = 8172*7c356e86SAndroid Build Coastguard Worker echo 0n $(if_test -U-) = 8173*7c356e86SAndroid Build Coastguard Worker echo 1= $(runtest -_) = 8174*7c356e86SAndroid Build Coastguard Worker echo 2= $(runtest !-_) = 8175*7c356e86SAndroid Build Coastguard Worker echo 3= $(runtest ?-_) = 8176*7c356e86SAndroid Build Coastguard Worker set +U 8177*7c356e86SAndroid Build Coastguard Worker echo 1+ $(runtest -U) = 8178*7c356e86SAndroid Build Coastguard Worker echo 2+ $(runtest !-U) = 8179*7c356e86SAndroid Build Coastguard Worker echo 3+ $(runtest ?-U) = 8180*7c356e86SAndroid Build Coastguard Worker echo 1+ $(runtest +U) = 8181*7c356e86SAndroid Build Coastguard Worker echo 2+ $(runtest !+U) = 8182*7c356e86SAndroid Build Coastguard Worker echo 3+ $(runtest ?+U) = 8183*7c356e86SAndroid Build Coastguard Worker set -U 8184*7c356e86SAndroid Build Coastguard Worker echo 1- $(runtest -U) = 8185*7c356e86SAndroid Build Coastguard Worker echo 2- $(runtest !-U) = 8186*7c356e86SAndroid Build Coastguard Worker echo 3- $(runtest ?-U) = 8187*7c356e86SAndroid Build Coastguard Worker echo 1- $(runtest +U) = 8188*7c356e86SAndroid Build Coastguard Worker echo 2- $(runtest !+U) = 8189*7c356e86SAndroid Build Coastguard Worker echo 3- $(runtest ?+U) = 8190*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8191*7c356e86SAndroid Build Coastguard Worker 0y 0 0 0 0 = 8192*7c356e86SAndroid Build Coastguard Worker 0n 1 1 1 1 = 8193*7c356e86SAndroid Build Coastguard Worker 1= 1 1 1 = 8194*7c356e86SAndroid Build Coastguard Worker 2= 1 1 1 = 8195*7c356e86SAndroid Build Coastguard Worker 3= 1 1 1 = 8196*7c356e86SAndroid Build Coastguard Worker 1+ 1 1 1 = 8197*7c356e86SAndroid Build Coastguard Worker 2+ 0 0 0 = 8198*7c356e86SAndroid Build Coastguard Worker 3+ 0 0 0 = 8199*7c356e86SAndroid Build Coastguard Worker 1- 0 0 0 = 8200*7c356e86SAndroid Build Coastguard Worker 2- 1 1 1 = 8201*7c356e86SAndroid Build Coastguard Worker 3- 0 0 0 = 8202*7c356e86SAndroid Build Coastguard Worker = short flags = 8203*7c356e86SAndroid Build Coastguard Worker 0y 0 0 0 0 = 8204*7c356e86SAndroid Build Coastguard Worker 0y 0 0 0 0 = 8205*7c356e86SAndroid Build Coastguard Worker 0n 1 1 1 1 = 8206*7c356e86SAndroid Build Coastguard Worker 0n 1 1 1 1 = 8207*7c356e86SAndroid Build Coastguard Worker 1= 1 1 1 = 8208*7c356e86SAndroid Build Coastguard Worker 2= 1 1 1 = 8209*7c356e86SAndroid Build Coastguard Worker 3= 1 1 1 = 8210*7c356e86SAndroid Build Coastguard Worker 1+ 1 1 1 = 8211*7c356e86SAndroid Build Coastguard Worker 2+ 0 0 0 = 8212*7c356e86SAndroid Build Coastguard Worker 3+ 0 0 0 = 8213*7c356e86SAndroid Build Coastguard Worker 1+ 1 1 1 = 8214*7c356e86SAndroid Build Coastguard Worker 2+ 0 0 0 = 8215*7c356e86SAndroid Build Coastguard Worker 3+ 0 0 0 = 8216*7c356e86SAndroid Build Coastguard Worker 1- 0 0 0 = 8217*7c356e86SAndroid Build Coastguard Worker 2- 1 1 1 = 8218*7c356e86SAndroid Build Coastguard Worker 3- 0 0 0 = 8219*7c356e86SAndroid Build Coastguard Worker 1- 0 0 0 = 8220*7c356e86SAndroid Build Coastguard Worker 2- 1 1 1 = 8221*7c356e86SAndroid Build Coastguard Worker 3- 0 0 0 = 8222*7c356e86SAndroid Build Coastguard Worker--- 8223*7c356e86SAndroid Build Coastguard Workername: test-varset-1 8224*7c356e86SAndroid Build Coastguard Workerdescription: 8225*7c356e86SAndroid Build Coastguard Worker Test the test -v operator 8226*7c356e86SAndroid Build Coastguard Workerstdin: 8227*7c356e86SAndroid Build Coastguard Worker [[ -v a ]] 8228*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8229*7c356e86SAndroid Build Coastguard Worker a= 8230*7c356e86SAndroid Build Coastguard Worker [[ -v a ]] 8231*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8232*7c356e86SAndroid Build Coastguard Worker unset a 8233*7c356e86SAndroid Build Coastguard Worker [[ -v a ]] 8234*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8235*7c356e86SAndroid Build Coastguard Worker a=x 8236*7c356e86SAndroid Build Coastguard Worker [[ -v a ]] 8237*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8238*7c356e86SAndroid Build Coastguard Worker nameref b=a 8239*7c356e86SAndroid Build Coastguard Worker [[ -v b ]] 8240*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8241*7c356e86SAndroid Build Coastguard Worker unset a 8242*7c356e86SAndroid Build Coastguard Worker [[ -v b ]] 8243*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8244*7c356e86SAndroid Build Coastguard Worker x[1]=y 8245*7c356e86SAndroid Build Coastguard Worker [[ -v x ]] 8246*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8247*7c356e86SAndroid Build Coastguard Worker [[ -v x[0] ]] 8248*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8249*7c356e86SAndroid Build Coastguard Worker [[ -v x[1] ]] 8250*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8251*7c356e86SAndroid Build Coastguard Worker [[ -v x[2] ]] 8252*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8253*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8254*7c356e86SAndroid Build Coastguard Worker 1 1 8255*7c356e86SAndroid Build Coastguard Worker 2 0 8256*7c356e86SAndroid Build Coastguard Worker 3 1 8257*7c356e86SAndroid Build Coastguard Worker 4 0 8258*7c356e86SAndroid Build Coastguard Worker 5 0 8259*7c356e86SAndroid Build Coastguard Worker 6 1 8260*7c356e86SAndroid Build Coastguard Worker 7 1 8261*7c356e86SAndroid Build Coastguard Worker 8 1 8262*7c356e86SAndroid Build Coastguard Worker 9 0 8263*7c356e86SAndroid Build Coastguard Worker 10 1 8264*7c356e86SAndroid Build Coastguard Worker--- 8265*7c356e86SAndroid Build Coastguard Workername: test-varset-2 8266*7c356e86SAndroid Build Coastguard Workerdescription: 8267*7c356e86SAndroid Build Coastguard Worker test -v works only on scalars 8268*7c356e86SAndroid Build Coastguard Workerstdin: 8269*7c356e86SAndroid Build Coastguard Worker [[ -v x[*] ]] 8270*7c356e86SAndroid Build Coastguard Worker echo ok 8271*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 8272*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 8273*7c356e86SAndroid Build Coastguard Worker /unexpected '\*'/ 8274*7c356e86SAndroid Build Coastguard Worker--- 8275*7c356e86SAndroid Build Coastguard Workername: test-stnze-1 8276*7c356e86SAndroid Build Coastguard Workerdescription: 8277*7c356e86SAndroid Build Coastguard Worker Check that the short form [ $x ] works 8278*7c356e86SAndroid Build Coastguard Workerstdin: 8279*7c356e86SAndroid Build Coastguard Worker i=0 8280*7c356e86SAndroid Build Coastguard Worker [ -n $x ] 8281*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8282*7c356e86SAndroid Build Coastguard Worker [ $x ] 8283*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8284*7c356e86SAndroid Build Coastguard Worker [ -n "$x" ] 8285*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8286*7c356e86SAndroid Build Coastguard Worker [ "$x" ] 8287*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8288*7c356e86SAndroid Build Coastguard Worker x=0 8289*7c356e86SAndroid Build Coastguard Worker [ -n $x ] 8290*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8291*7c356e86SAndroid Build Coastguard Worker [ $x ] 8292*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8293*7c356e86SAndroid Build Coastguard Worker [ -n "$x" ] 8294*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8295*7c356e86SAndroid Build Coastguard Worker [ "$x" ] 8296*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8297*7c356e86SAndroid Build Coastguard Worker x='1 -a 1 = 2' 8298*7c356e86SAndroid Build Coastguard Worker [ -n $x ] 8299*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8300*7c356e86SAndroid Build Coastguard Worker [ $x ] 8301*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8302*7c356e86SAndroid Build Coastguard Worker [ -n "$x" ] 8303*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8304*7c356e86SAndroid Build Coastguard Worker [ "$x" ] 8305*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8306*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8307*7c356e86SAndroid Build Coastguard Worker 1 0 8308*7c356e86SAndroid Build Coastguard Worker 2 1 8309*7c356e86SAndroid Build Coastguard Worker 3 1 8310*7c356e86SAndroid Build Coastguard Worker 4 1 8311*7c356e86SAndroid Build Coastguard Worker 5 0 8312*7c356e86SAndroid Build Coastguard Worker 6 0 8313*7c356e86SAndroid Build Coastguard Worker 7 0 8314*7c356e86SAndroid Build Coastguard Worker 8 0 8315*7c356e86SAndroid Build Coastguard Worker 9 1 8316*7c356e86SAndroid Build Coastguard Worker 10 1 8317*7c356e86SAndroid Build Coastguard Worker 11 0 8318*7c356e86SAndroid Build Coastguard Worker 12 0 8319*7c356e86SAndroid Build Coastguard Worker--- 8320*7c356e86SAndroid Build Coastguard Workername: test-stnze-2 8321*7c356e86SAndroid Build Coastguard Workerdescription: 8322*7c356e86SAndroid Build Coastguard Worker Check that the short form [[ $x ]] works (ksh93 extension) 8323*7c356e86SAndroid Build Coastguard Workerstdin: 8324*7c356e86SAndroid Build Coastguard Worker i=0 8325*7c356e86SAndroid Build Coastguard Worker [[ -n $x ]] 8326*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8327*7c356e86SAndroid Build Coastguard Worker [[ $x ]] 8328*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8329*7c356e86SAndroid Build Coastguard Worker [[ -n "$x" ]] 8330*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8331*7c356e86SAndroid Build Coastguard Worker [[ "$x" ]] 8332*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8333*7c356e86SAndroid Build Coastguard Worker x=0 8334*7c356e86SAndroid Build Coastguard Worker [[ -n $x ]] 8335*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8336*7c356e86SAndroid Build Coastguard Worker [[ $x ]] 8337*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8338*7c356e86SAndroid Build Coastguard Worker [[ -n "$x" ]] 8339*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8340*7c356e86SAndroid Build Coastguard Worker [[ "$x" ]] 8341*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8342*7c356e86SAndroid Build Coastguard Worker x='1 -a 1 = 2' 8343*7c356e86SAndroid Build Coastguard Worker [[ -n $x ]] 8344*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8345*7c356e86SAndroid Build Coastguard Worker [[ $x ]] 8346*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8347*7c356e86SAndroid Build Coastguard Worker [[ -n "$x" ]] 8348*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8349*7c356e86SAndroid Build Coastguard Worker [[ "$x" ]] 8350*7c356e86SAndroid Build Coastguard Worker rv=$?; echo $((++i)) $rv 8351*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8352*7c356e86SAndroid Build Coastguard Worker 1 1 8353*7c356e86SAndroid Build Coastguard Worker 2 1 8354*7c356e86SAndroid Build Coastguard Worker 3 1 8355*7c356e86SAndroid Build Coastguard Worker 4 1 8356*7c356e86SAndroid Build Coastguard Worker 5 0 8357*7c356e86SAndroid Build Coastguard Worker 6 0 8358*7c356e86SAndroid Build Coastguard Worker 7 0 8359*7c356e86SAndroid Build Coastguard Worker 8 0 8360*7c356e86SAndroid Build Coastguard Worker 9 0 8361*7c356e86SAndroid Build Coastguard Worker 10 0 8362*7c356e86SAndroid Build Coastguard Worker 11 0 8363*7c356e86SAndroid Build Coastguard Worker 12 0 8364*7c356e86SAndroid Build Coastguard Worker--- 8365*7c356e86SAndroid Build Coastguard Workername: test-numeq 8366*7c356e86SAndroid Build Coastguard Workerdescription: 8367*7c356e86SAndroid Build Coastguard Worker Check numeric -eq works (R40d regression); spotted by Martijn Dekker 8368*7c356e86SAndroid Build Coastguard Workerstdin: 8369*7c356e86SAndroid Build Coastguard Worker tst() { 8370*7c356e86SAndroid Build Coastguard Worker eval "$2" 8371*7c356e86SAndroid Build Coastguard Worker case $? in 8372*7c356e86SAndroid Build Coastguard Worker (0) echo yepp 0 \#"$*" ;; 8373*7c356e86SAndroid Build Coastguard Worker (1) echo nope 1 \#"$*" ;; 8374*7c356e86SAndroid Build Coastguard Worker (2) echo terr 2 \#"$*" ;; 8375*7c356e86SAndroid Build Coastguard Worker (*) echo wtf\? $? \#"$*" ;; 8376*7c356e86SAndroid Build Coastguard Worker esac 8377*7c356e86SAndroid Build Coastguard Worker } 8378*7c356e86SAndroid Build Coastguard Worker tst 1 'test 2 -eq 2' 8379*7c356e86SAndroid Build Coastguard Worker tst 2 'test 2 -eq 2a' 8380*7c356e86SAndroid Build Coastguard Worker tst 3 'test 2 -eq 3' 8381*7c356e86SAndroid Build Coastguard Worker tst 4 'test 2 -ne 2' 8382*7c356e86SAndroid Build Coastguard Worker tst 5 'test 2 -ne 2a' 8383*7c356e86SAndroid Build Coastguard Worker tst 6 'test 2 -ne 3' 8384*7c356e86SAndroid Build Coastguard Worker tst 7 'test \! 2 -eq 2' 8385*7c356e86SAndroid Build Coastguard Worker tst 8 'test \! 2 -eq 2a' 8386*7c356e86SAndroid Build Coastguard Worker tst 9 'test \! 2 -eq 3' 8387*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8388*7c356e86SAndroid Build Coastguard Worker yepp 0 #1 test 2 -eq 2 8389*7c356e86SAndroid Build Coastguard Worker terr 2 #2 test 2 -eq 2a 8390*7c356e86SAndroid Build Coastguard Worker nope 1 #3 test 2 -eq 3 8391*7c356e86SAndroid Build Coastguard Worker nope 1 #4 test 2 -ne 2 8392*7c356e86SAndroid Build Coastguard Worker terr 2 #5 test 2 -ne 2a 8393*7c356e86SAndroid Build Coastguard Worker yepp 0 #6 test 2 -ne 3 8394*7c356e86SAndroid Build Coastguard Worker nope 1 #7 test \! 2 -eq 2 8395*7c356e86SAndroid Build Coastguard Worker terr 2 #8 test \! 2 -eq 2a 8396*7c356e86SAndroid Build Coastguard Worker yepp 0 #9 test \! 2 -eq 3 8397*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 8398*7c356e86SAndroid Build Coastguard Worker /bad number/ 8399*7c356e86SAndroid Build Coastguard Worker--- 8400*7c356e86SAndroid Build Coastguard Workername: mkshrc-1 8401*7c356e86SAndroid Build Coastguard Workerdescription: 8402*7c356e86SAndroid Build Coastguard Worker Check that ~/.mkshrc works correctly. 8403*7c356e86SAndroid Build Coastguard Worker Part 1: verify user environment is not read (internal) 8404*7c356e86SAndroid Build Coastguard Workerstdin: 8405*7c356e86SAndroid Build Coastguard Worker echo x $FNORD 8406*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8407*7c356e86SAndroid Build Coastguard Worker x 8408*7c356e86SAndroid Build Coastguard Worker--- 8409*7c356e86SAndroid Build Coastguard Workername: mkshrc-2a 8410*7c356e86SAndroid Build Coastguard Workerdescription: 8411*7c356e86SAndroid Build Coastguard Worker Check that ~/.mkshrc works correctly. 8412*7c356e86SAndroid Build Coastguard Worker Part 2: verify mkshrc is not read (non-interactive shells) 8413*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".mkshrc" 8414*7c356e86SAndroid Build Coastguard Worker FNORD=42 8415*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=.!ENV=! 8416*7c356e86SAndroid Build Coastguard Workerstdin: 8417*7c356e86SAndroid Build Coastguard Worker echo x $FNORD 8418*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8419*7c356e86SAndroid Build Coastguard Worker x 8420*7c356e86SAndroid Build Coastguard Worker--- 8421*7c356e86SAndroid Build Coastguard Workername: mkshrc-2b 8422*7c356e86SAndroid Build Coastguard Workerdescription: 8423*7c356e86SAndroid Build Coastguard Worker Check that ~/.mkshrc works correctly. 8424*7c356e86SAndroid Build Coastguard Worker Part 2: verify mkshrc can be read (interactive shells) 8425*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".mkshrc" 8426*7c356e86SAndroid Build Coastguard Worker FNORD=42 8427*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 8428*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 8429*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=.!ENV=!PS1=! 8430*7c356e86SAndroid Build Coastguard Workerstdin: 8431*7c356e86SAndroid Build Coastguard Worker echo x $FNORD 8432*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8433*7c356e86SAndroid Build Coastguard Worker x 42 8434*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 8435*7c356e86SAndroid Build Coastguard Worker /(# )*/ 8436*7c356e86SAndroid Build Coastguard Worker--- 8437*7c356e86SAndroid Build Coastguard Workername: mkshrc-3 8438*7c356e86SAndroid Build Coastguard Workerdescription: 8439*7c356e86SAndroid Build Coastguard Worker Check that ~/.mkshrc works correctly. 8440*7c356e86SAndroid Build Coastguard Worker Part 3: verify mkshrc can be turned off 8441*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 ".mkshrc" 8442*7c356e86SAndroid Build Coastguard Worker FNORD=42 8443*7c356e86SAndroid Build Coastguard Workerenv-setup: !HOME=.!ENV=nonexistant! 8444*7c356e86SAndroid Build Coastguard Workerstdin: 8445*7c356e86SAndroid Build Coastguard Worker echo x $FNORD 8446*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8447*7c356e86SAndroid Build Coastguard Worker x 8448*7c356e86SAndroid Build Coastguard Worker--- 8449*7c356e86SAndroid Build Coastguard Workername: sh-mode-1 8450*7c356e86SAndroid Build Coastguard Workerdescription: 8451*7c356e86SAndroid Build Coastguard Worker Check that sh mode turns braceexpand off 8452*7c356e86SAndroid Build Coastguard Worker and that that works correctly 8453*7c356e86SAndroid Build Coastguard Workerstdin: 8454*7c356e86SAndroid Build Coastguard Worker set -o braceexpand 8455*7c356e86SAndroid Build Coastguard Worker set +o sh 8456*7c356e86SAndroid Build Coastguard Worker [[ -o sh ]] && echo sh 8457*7c356e86SAndroid Build Coastguard Worker [[ -o !sh ]] && echo nosh 8458*7c356e86SAndroid Build Coastguard Worker [[ -o braceexpand ]] && echo brex 8459*7c356e86SAndroid Build Coastguard Worker [[ -o !braceexpand ]] && echo nobrex 8460*7c356e86SAndroid Build Coastguard Worker echo {a,b,c} 8461*7c356e86SAndroid Build Coastguard Worker set +o braceexpand 8462*7c356e86SAndroid Build Coastguard Worker echo {a,b,c} 8463*7c356e86SAndroid Build Coastguard Worker set -o braceexpand 8464*7c356e86SAndroid Build Coastguard Worker echo {a,b,c} 8465*7c356e86SAndroid Build Coastguard Worker set -o sh 8466*7c356e86SAndroid Build Coastguard Worker echo {a,b,c} 8467*7c356e86SAndroid Build Coastguard Worker [[ -o sh ]] && echo sh 8468*7c356e86SAndroid Build Coastguard Worker [[ -o !sh ]] && echo nosh 8469*7c356e86SAndroid Build Coastguard Worker [[ -o braceexpand ]] && echo brex 8470*7c356e86SAndroid Build Coastguard Worker [[ -o !braceexpand ]] && echo nobrex 8471*7c356e86SAndroid Build Coastguard Worker set -o braceexpand 8472*7c356e86SAndroid Build Coastguard Worker echo {a,b,c} 8473*7c356e86SAndroid Build Coastguard Worker [[ -o sh ]] && echo sh 8474*7c356e86SAndroid Build Coastguard Worker [[ -o !sh ]] && echo nosh 8475*7c356e86SAndroid Build Coastguard Worker [[ -o braceexpand ]] && echo brex 8476*7c356e86SAndroid Build Coastguard Worker [[ -o !braceexpand ]] && echo nobrex 8477*7c356e86SAndroid Build Coastguard Worker [[ $(exec -a -set "$__progname" -o) = *login+(' ')on* ]]; echo $? 8478*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8479*7c356e86SAndroid Build Coastguard Worker nosh 8480*7c356e86SAndroid Build Coastguard Worker brex 8481*7c356e86SAndroid Build Coastguard Worker a b c 8482*7c356e86SAndroid Build Coastguard Worker {a,b,c} 8483*7c356e86SAndroid Build Coastguard Worker a b c 8484*7c356e86SAndroid Build Coastguard Worker {a,b,c} 8485*7c356e86SAndroid Build Coastguard Worker sh 8486*7c356e86SAndroid Build Coastguard Worker nobrex 8487*7c356e86SAndroid Build Coastguard Worker a b c 8488*7c356e86SAndroid Build Coastguard Worker sh 8489*7c356e86SAndroid Build Coastguard Worker brex 8490*7c356e86SAndroid Build Coastguard Worker 0 8491*7c356e86SAndroid Build Coastguard Worker--- 8492*7c356e86SAndroid Build Coastguard Workername: sh-mode-2a 8493*7c356e86SAndroid Build Coastguard Workerdescription: 8494*7c356e86SAndroid Build Coastguard Worker Check that posix or sh mode is *not* automatically turned on 8495*7c356e86SAndroid Build Coastguard Workercategory: !binsh 8496*7c356e86SAndroid Build Coastguard Workerstdin: 8497*7c356e86SAndroid Build Coastguard Worker for shell in {,-}{,r}{,k,mk}sh {,-}{,R}{,K,MK}SH.EXE; do 8498*7c356e86SAndroid Build Coastguard Worker ln -s "$__progname" ./$shell || cp "$__progname" ./$shell 8499*7c356e86SAndroid Build Coastguard Worker print -- $shell $(./$shell +l -c ' 8500*7c356e86SAndroid Build Coastguard Worker [[ -o sh || -o posix ]] && echo sh 8501*7c356e86SAndroid Build Coastguard Worker [[ -o !sh && -o !posix ]] && echo nosh 8502*7c356e86SAndroid Build Coastguard Worker [[ -o restricted ]] && echo lim || echo ok 8503*7c356e86SAndroid Build Coastguard Worker ') 8504*7c356e86SAndroid Build Coastguard Worker done 8505*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8506*7c356e86SAndroid Build Coastguard Worker sh nosh ok 8507*7c356e86SAndroid Build Coastguard Worker ksh nosh ok 8508*7c356e86SAndroid Build Coastguard Worker mksh nosh ok 8509*7c356e86SAndroid Build Coastguard Worker rsh nosh lim 8510*7c356e86SAndroid Build Coastguard Worker rksh nosh lim 8511*7c356e86SAndroid Build Coastguard Worker rmksh nosh lim 8512*7c356e86SAndroid Build Coastguard Worker -sh nosh ok 8513*7c356e86SAndroid Build Coastguard Worker -ksh nosh ok 8514*7c356e86SAndroid Build Coastguard Worker -mksh nosh ok 8515*7c356e86SAndroid Build Coastguard Worker -rsh nosh lim 8516*7c356e86SAndroid Build Coastguard Worker -rksh nosh lim 8517*7c356e86SAndroid Build Coastguard Worker -rmksh nosh lim 8518*7c356e86SAndroid Build Coastguard Worker SH.EXE nosh ok 8519*7c356e86SAndroid Build Coastguard Worker KSH.EXE nosh ok 8520*7c356e86SAndroid Build Coastguard Worker MKSH.EXE nosh ok 8521*7c356e86SAndroid Build Coastguard Worker RSH.EXE nosh lim 8522*7c356e86SAndroid Build Coastguard Worker RKSH.EXE nosh lim 8523*7c356e86SAndroid Build Coastguard Worker RMKSH.EXE nosh lim 8524*7c356e86SAndroid Build Coastguard Worker -SH.EXE nosh ok 8525*7c356e86SAndroid Build Coastguard Worker -KSH.EXE nosh ok 8526*7c356e86SAndroid Build Coastguard Worker -MKSH.EXE nosh ok 8527*7c356e86SAndroid Build Coastguard Worker -RSH.EXE nosh lim 8528*7c356e86SAndroid Build Coastguard Worker -RKSH.EXE nosh lim 8529*7c356e86SAndroid Build Coastguard Worker -RMKSH.EXE nosh lim 8530*7c356e86SAndroid Build Coastguard Worker--- 8531*7c356e86SAndroid Build Coastguard Workername: sh-mode-2b 8532*7c356e86SAndroid Build Coastguard Workerdescription: 8533*7c356e86SAndroid Build Coastguard Worker Check that posix or sh mode *is* automatically turned on 8534*7c356e86SAndroid Build Coastguard Workercategory: binsh 8535*7c356e86SAndroid Build Coastguard Workerstdin: 8536*7c356e86SAndroid Build Coastguard Worker for shell in {,-}{,r}{,k,mk}sh {,-}{,R}{,K,MK}SH.EXE; do 8537*7c356e86SAndroid Build Coastguard Worker ln -s "$__progname" ./$shell || cp "$__progname" ./$shell 8538*7c356e86SAndroid Build Coastguard Worker print -- $shell $(./$shell +l -c ' 8539*7c356e86SAndroid Build Coastguard Worker [[ -o sh || -o posix ]] && echo sh 8540*7c356e86SAndroid Build Coastguard Worker [[ -o !sh && -o !posix ]] && echo nosh 8541*7c356e86SAndroid Build Coastguard Worker [[ -o restricted ]] && echo lim || echo ok 8542*7c356e86SAndroid Build Coastguard Worker ') 8543*7c356e86SAndroid Build Coastguard Worker done 8544*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8545*7c356e86SAndroid Build Coastguard Worker sh sh ok 8546*7c356e86SAndroid Build Coastguard Worker ksh nosh ok 8547*7c356e86SAndroid Build Coastguard Worker mksh nosh ok 8548*7c356e86SAndroid Build Coastguard Worker rsh sh lim 8549*7c356e86SAndroid Build Coastguard Worker rksh nosh lim 8550*7c356e86SAndroid Build Coastguard Worker rmksh nosh lim 8551*7c356e86SAndroid Build Coastguard Worker -sh sh ok 8552*7c356e86SAndroid Build Coastguard Worker -ksh nosh ok 8553*7c356e86SAndroid Build Coastguard Worker -mksh nosh ok 8554*7c356e86SAndroid Build Coastguard Worker -rsh sh lim 8555*7c356e86SAndroid Build Coastguard Worker -rksh nosh lim 8556*7c356e86SAndroid Build Coastguard Worker -rmksh nosh lim 8557*7c356e86SAndroid Build Coastguard Worker SH.EXE sh ok 8558*7c356e86SAndroid Build Coastguard Worker KSH.EXE nosh ok 8559*7c356e86SAndroid Build Coastguard Worker MKSH.EXE nosh ok 8560*7c356e86SAndroid Build Coastguard Worker RSH.EXE sh lim 8561*7c356e86SAndroid Build Coastguard Worker RKSH.EXE nosh lim 8562*7c356e86SAndroid Build Coastguard Worker RMKSH.EXE nosh lim 8563*7c356e86SAndroid Build Coastguard Worker -SH.EXE sh ok 8564*7c356e86SAndroid Build Coastguard Worker -KSH.EXE nosh ok 8565*7c356e86SAndroid Build Coastguard Worker -MKSH.EXE nosh ok 8566*7c356e86SAndroid Build Coastguard Worker -RSH.EXE sh lim 8567*7c356e86SAndroid Build Coastguard Worker -RKSH.EXE nosh lim 8568*7c356e86SAndroid Build Coastguard Worker -RMKSH.EXE nosh lim 8569*7c356e86SAndroid Build Coastguard Worker--- 8570*7c356e86SAndroid Build Coastguard Workername: sh-options 8571*7c356e86SAndroid Build Coastguard Workerdescription: 8572*7c356e86SAndroid Build Coastguard Worker Check that "set +o" DTRT per POSIX 8573*7c356e86SAndroid Build Coastguard Workerstdin: 8574*7c356e86SAndroid Build Coastguard Worker t() { 8575*7c356e86SAndroid Build Coastguard Worker [[ -o vi ]]; a=$? 8576*7c356e86SAndroid Build Coastguard Worker [[ -o pipefail ]]; b=$? 8577*7c356e86SAndroid Build Coastguard Worker echo $((++i)) $a $b . 8578*7c356e86SAndroid Build Coastguard Worker } 8579*7c356e86SAndroid Build Coastguard Worker set -e 8580*7c356e86SAndroid Build Coastguard Worker set -o vi 8581*7c356e86SAndroid Build Coastguard Worker set +o pipefail 8582*7c356e86SAndroid Build Coastguard Worker set +e 8583*7c356e86SAndroid Build Coastguard Worker t 8584*7c356e86SAndroid Build Coastguard Worker x=$(set +o) 8585*7c356e86SAndroid Build Coastguard Worker set +o vi 8586*7c356e86SAndroid Build Coastguard Worker set -o pipefail 8587*7c356e86SAndroid Build Coastguard Worker t 8588*7c356e86SAndroid Build Coastguard Worker eval "$x" 8589*7c356e86SAndroid Build Coastguard Worker t 8590*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8591*7c356e86SAndroid Build Coastguard Worker 1 0 1 . 8592*7c356e86SAndroid Build Coastguard Worker 2 1 0 . 8593*7c356e86SAndroid Build Coastguard Worker 3 0 1 . 8594*7c356e86SAndroid Build Coastguard Worker--- 8595*7c356e86SAndroid Build Coastguard Workername: pipeline-1 8596*7c356e86SAndroid Build Coastguard Workerdescription: 8597*7c356e86SAndroid Build Coastguard Worker pdksh bug: last command of a pipeline is executed in a 8598*7c356e86SAndroid Build Coastguard Worker subshell - make sure it still is, scripts depend on it 8599*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abcx" 8600*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "abcy" 8601*7c356e86SAndroid Build Coastguard Workerstdin: 8602*7c356e86SAndroid Build Coastguard Worker echo * 8603*7c356e86SAndroid Build Coastguard Worker echo a | while read d; do 8604*7c356e86SAndroid Build Coastguard Worker echo $d 8605*7c356e86SAndroid Build Coastguard Worker echo $d* 8606*7c356e86SAndroid Build Coastguard Worker echo * 8607*7c356e86SAndroid Build Coastguard Worker set -o noglob 8608*7c356e86SAndroid Build Coastguard Worker echo $d* 8609*7c356e86SAndroid Build Coastguard Worker echo * 8610*7c356e86SAndroid Build Coastguard Worker done 8611*7c356e86SAndroid Build Coastguard Worker echo * 8612*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8613*7c356e86SAndroid Build Coastguard Worker abcx abcy 8614*7c356e86SAndroid Build Coastguard Worker a 8615*7c356e86SAndroid Build Coastguard Worker abcx abcy 8616*7c356e86SAndroid Build Coastguard Worker abcx abcy 8617*7c356e86SAndroid Build Coastguard Worker a* 8618*7c356e86SAndroid Build Coastguard Worker * 8619*7c356e86SAndroid Build Coastguard Worker abcx abcy 8620*7c356e86SAndroid Build Coastguard Worker--- 8621*7c356e86SAndroid Build Coastguard Workername: pipeline-2 8622*7c356e86SAndroid Build Coastguard Workerdescription: 8623*7c356e86SAndroid Build Coastguard Worker check that co-processes work with TCOMs, TPIPEs and TPARENs 8624*7c356e86SAndroid Build Coastguard Workercategory: !nojsig 8625*7c356e86SAndroid Build Coastguard Workerstdin: 8626*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'i=100; echo hi |& while read -p line; do echo "$((i++)) $line"; done' 8627*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'i=200; echo hi | cat |& while read -p line; do echo "$((i++)) $line"; done' 8628*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'i=300; (echo hi | cat) |& while read -p line; do echo "$((i++)) $line"; done' 8629*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8630*7c356e86SAndroid Build Coastguard Worker 100 hi 8631*7c356e86SAndroid Build Coastguard Worker 200 hi 8632*7c356e86SAndroid Build Coastguard Worker 300 hi 8633*7c356e86SAndroid Build Coastguard Worker--- 8634*7c356e86SAndroid Build Coastguard Workername: pipeline-3 8635*7c356e86SAndroid Build Coastguard Workerdescription: 8636*7c356e86SAndroid Build Coastguard Worker Check that PIPESTATUS does what it's supposed to 8637*7c356e86SAndroid Build Coastguard Workerstdin: 8638*7c356e86SAndroid Build Coastguard Worker echo 1 $PIPESTATUS . 8639*7c356e86SAndroid Build Coastguard Worker echo 2 ${PIPESTATUS[0]} . 8640*7c356e86SAndroid Build Coastguard Worker echo 3 ${PIPESTATUS[1]} . 8641*7c356e86SAndroid Build Coastguard Worker (echo x; exit 12) | (cat; exit 23) | (cat; exit 42) 8642*7c356e86SAndroid Build Coastguard Worker echo 5 $? , $PIPESTATUS , ${PIPESTATUS[0]} , ${PIPESTATUS[1]} , ${PIPESTATUS[2]} , ${PIPESTATUS[3]} . 8643*7c356e86SAndroid Build Coastguard Worker echo 6 ${PIPESTATUS[0]} . 8644*7c356e86SAndroid Build Coastguard Worker set | fgrep PIPESTATUS 8645*7c356e86SAndroid Build Coastguard Worker echo 8 $(set | fgrep PIPESTATUS) . 8646*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8647*7c356e86SAndroid Build Coastguard Worker 1 0 . 8648*7c356e86SAndroid Build Coastguard Worker 2 0 . 8649*7c356e86SAndroid Build Coastguard Worker 3 . 8650*7c356e86SAndroid Build Coastguard Worker x 8651*7c356e86SAndroid Build Coastguard Worker 5 42 , 12 , 12 , 23 , 42 , . 8652*7c356e86SAndroid Build Coastguard Worker 6 0 . 8653*7c356e86SAndroid Build Coastguard Worker PIPESTATUS[0]=0 8654*7c356e86SAndroid Build Coastguard Worker 8 PIPESTATUS[0]=0 PIPESTATUS[1]=0 . 8655*7c356e86SAndroid Build Coastguard Worker--- 8656*7c356e86SAndroid Build Coastguard Workername: pipeline-4 8657*7c356e86SAndroid Build Coastguard Workerdescription: 8658*7c356e86SAndroid Build Coastguard Worker Check that "set -o pipefail" does what it's supposed to 8659*7c356e86SAndroid Build Coastguard Workerstdin: 8660*7c356e86SAndroid Build Coastguard Worker echo 1 "$("$__progname" -c '(exit 12) | (exit 23) | (exit 42); echo $?')" . 8661*7c356e86SAndroid Build Coastguard Worker echo 2 "$("$__progname" -c '! (exit 12) | (exit 23) | (exit 42); echo $?')" . 8662*7c356e86SAndroid Build Coastguard Worker echo 3 "$("$__progname" -o pipefail -c '(exit 12) | (exit 23) | (exit 42); echo $?')" . 8663*7c356e86SAndroid Build Coastguard Worker echo 4 "$("$__progname" -o pipefail -c '! (exit 12) | (exit 23) | (exit 42); echo $?')" . 8664*7c356e86SAndroid Build Coastguard Worker echo 5 "$("$__progname" -c '(exit 23) | (exit 42) | :; echo $?')" . 8665*7c356e86SAndroid Build Coastguard Worker echo 6 "$("$__progname" -c '! (exit 23) | (exit 42) | :; echo $?')" . 8666*7c356e86SAndroid Build Coastguard Worker echo 7 "$("$__progname" -o pipefail -c '(exit 23) | (exit 42) | :; echo $?')" . 8667*7c356e86SAndroid Build Coastguard Worker echo 8 "$("$__progname" -o pipefail -c '! (exit 23) | (exit 42) | :; echo $?')" . 8668*7c356e86SAndroid Build Coastguard Worker echo 9 "$("$__progname" -o pipefail -c 'x=$( (exit 23) | (exit 42) | :); echo $?')" . 8669*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8670*7c356e86SAndroid Build Coastguard Worker 1 42 . 8671*7c356e86SAndroid Build Coastguard Worker 2 0 . 8672*7c356e86SAndroid Build Coastguard Worker 3 42 . 8673*7c356e86SAndroid Build Coastguard Worker 4 0 . 8674*7c356e86SAndroid Build Coastguard Worker 5 0 . 8675*7c356e86SAndroid Build Coastguard Worker 6 1 . 8676*7c356e86SAndroid Build Coastguard Worker 7 42 . 8677*7c356e86SAndroid Build Coastguard Worker 8 0 . 8678*7c356e86SAndroid Build Coastguard Worker 9 42 . 8679*7c356e86SAndroid Build Coastguard Worker--- 8680*7c356e86SAndroid Build Coastguard Workername: persist-history-1 8681*7c356e86SAndroid Build Coastguard Workerdescription: 8682*7c356e86SAndroid Build Coastguard Worker Check if persistent history saving works 8683*7c356e86SAndroid Build Coastguard Workercategory: !no-histfile 8684*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 8685*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 8686*7c356e86SAndroid Build Coastguard Workerenv-setup: !ENV=./Env!HISTFILE=hist.file! 8687*7c356e86SAndroid Build Coastguard Workerfile-setup: file 644 "Env" 8688*7c356e86SAndroid Build Coastguard Worker PS1=X 8689*7c356e86SAndroid Build Coastguard Workerstdin: 8690*7c356e86SAndroid Build Coastguard Worker cat hist.file 8691*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern: 8692*7c356e86SAndroid Build Coastguard Worker /cat hist.file/ 8693*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 8694*7c356e86SAndroid Build Coastguard Worker /^X*$/ 8695*7c356e86SAndroid Build Coastguard Worker--- 8696*7c356e86SAndroid Build Coastguard Workername: typeset-1 8697*7c356e86SAndroid Build Coastguard Workerdescription: 8698*7c356e86SAndroid Build Coastguard Worker Check that typeset -g works correctly 8699*7c356e86SAndroid Build Coastguard Workerstdin: 8700*7c356e86SAndroid Build Coastguard Worker set -A arrfoo 65 8701*7c356e86SAndroid Build Coastguard Worker foo() { 8702*7c356e86SAndroid Build Coastguard Worker typeset -g -Uui16 arrfoo[*] 8703*7c356e86SAndroid Build Coastguard Worker } 8704*7c356e86SAndroid Build Coastguard Worker echo before ${arrfoo[0]} . 8705*7c356e86SAndroid Build Coastguard Worker foo 8706*7c356e86SAndroid Build Coastguard Worker echo after ${arrfoo[0]} . 8707*7c356e86SAndroid Build Coastguard Worker set -A arrbar 65 8708*7c356e86SAndroid Build Coastguard Worker bar() { 8709*7c356e86SAndroid Build Coastguard Worker echo inside before ${arrbar[0]} . 8710*7c356e86SAndroid Build Coastguard Worker arrbar[0]=97 8711*7c356e86SAndroid Build Coastguard Worker echo inside changed ${arrbar[0]} . 8712*7c356e86SAndroid Build Coastguard Worker typeset -g -Uui16 arrbar[*] 8713*7c356e86SAndroid Build Coastguard Worker echo inside typeset ${arrbar[0]} . 8714*7c356e86SAndroid Build Coastguard Worker arrbar[0]=48 8715*7c356e86SAndroid Build Coastguard Worker echo inside changed ${arrbar[0]} . 8716*7c356e86SAndroid Build Coastguard Worker } 8717*7c356e86SAndroid Build Coastguard Worker echo before ${arrbar[0]} . 8718*7c356e86SAndroid Build Coastguard Worker bar 8719*7c356e86SAndroid Build Coastguard Worker echo after ${arrbar[0]} . 8720*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8721*7c356e86SAndroid Build Coastguard Worker before 65 . 8722*7c356e86SAndroid Build Coastguard Worker after 16#41 . 8723*7c356e86SAndroid Build Coastguard Worker before 65 . 8724*7c356e86SAndroid Build Coastguard Worker inside before 65 . 8725*7c356e86SAndroid Build Coastguard Worker inside changed 97 . 8726*7c356e86SAndroid Build Coastguard Worker inside typeset 16#61 . 8727*7c356e86SAndroid Build Coastguard Worker inside changed 16#30 . 8728*7c356e86SAndroid Build Coastguard Worker after 16#30 . 8729*7c356e86SAndroid Build Coastguard Worker--- 8730*7c356e86SAndroid Build Coastguard Workername: typeset-2 8731*7c356e86SAndroid Build Coastguard Workerdescription: 8732*7c356e86SAndroid Build Coastguard Worker Check that typeset -p on arrays works correctly 8733*7c356e86SAndroid Build Coastguard Workerstdin: 8734*7c356e86SAndroid Build Coastguard Worker set -A x -- a b c 8735*7c356e86SAndroid Build Coastguard Worker echo = 8736*7c356e86SAndroid Build Coastguard Worker typeset -p x 8737*7c356e86SAndroid Build Coastguard Worker echo = 8738*7c356e86SAndroid Build Coastguard Worker typeset -p x[1] 8739*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8740*7c356e86SAndroid Build Coastguard Worker = 8741*7c356e86SAndroid Build Coastguard Worker set -A x 8742*7c356e86SAndroid Build Coastguard Worker typeset x[0]=a 8743*7c356e86SAndroid Build Coastguard Worker typeset x[1]=b 8744*7c356e86SAndroid Build Coastguard Worker typeset x[2]=c 8745*7c356e86SAndroid Build Coastguard Worker = 8746*7c356e86SAndroid Build Coastguard Worker typeset x[1]=b 8747*7c356e86SAndroid Build Coastguard Worker--- 8748*7c356e86SAndroid Build Coastguard Workername: typeset-padding-1 8749*7c356e86SAndroid Build Coastguard Workerdescription: 8750*7c356e86SAndroid Build Coastguard Worker Check if left/right justification works as per TFM 8751*7c356e86SAndroid Build Coastguard Workerstdin: 8752*7c356e86SAndroid Build Coastguard Worker typeset -L10 ln=0hall0 8753*7c356e86SAndroid Build Coastguard Worker typeset -R10 rn=0hall0 8754*7c356e86SAndroid Build Coastguard Worker typeset -ZL10 lz=0hall0 8755*7c356e86SAndroid Build Coastguard Worker typeset -ZR10 rz=0hall0 8756*7c356e86SAndroid Build Coastguard Worker typeset -Z10 rx=" hallo " 8757*7c356e86SAndroid Build Coastguard Worker echo "<$ln> <$rn> <$lz> <$rz> <$rx>" 8758*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8759*7c356e86SAndroid Build Coastguard Worker <0hall0 > < 0hall0> <hall0 > <00000hall0> <0000 hallo> 8760*7c356e86SAndroid Build Coastguard Worker--- 8761*7c356e86SAndroid Build Coastguard Workername: typeset-padding-2 8762*7c356e86SAndroid Build Coastguard Workerdescription: 8763*7c356e86SAndroid Build Coastguard Worker Check if base-!10 integers are padded right 8764*7c356e86SAndroid Build Coastguard Workerstdin: 8765*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -L9 ln=16#1 8766*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -R9 rn=16#1 8767*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z9 zn=16#1 8768*7c356e86SAndroid Build Coastguard Worker typeset -L9 ls=16#1 8769*7c356e86SAndroid Build Coastguard Worker typeset -R9 rs=16#1 8770*7c356e86SAndroid Build Coastguard Worker typeset -Z9 zs=16#1 8771*7c356e86SAndroid Build Coastguard Worker echo "<$ln> <$rn> <$zn> <$ls> <$rs> <$zs>" 8772*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8773*7c356e86SAndroid Build Coastguard Worker <16#1 > < 16#1> <16#000001> <16#1 > < 16#1> <0000016#1> 8774*7c356e86SAndroid Build Coastguard Worker--- 8775*7c356e86SAndroid Build Coastguard Workername: typeset-padding-3 8776*7c356e86SAndroid Build Coastguard Workerdescription: 8777*7c356e86SAndroid Build Coastguard Worker Check for a regression in which UTF-8 wasn’t left-padded right 8778*7c356e86SAndroid Build Coastguard Workerstdin: 8779*7c356e86SAndroid Build Coastguard Worker set -U 8780*7c356e86SAndroid Build Coastguard Worker nl=$'\n' 8781*7c356e86SAndroid Build Coastguard Worker typeset -L20 x='. ak' 8782*7c356e86SAndroid Build Coastguard Worker typeset -R20 y='. ak' 8783*7c356e86SAndroid Build Coastguard Worker print -r -- "<$x> (1$nl<12345678910 345678920$nl<$y> 1)" 8784*7c356e86SAndroid Build Coastguard Worker typeset -L20 x='. aẞ' 8785*7c356e86SAndroid Build Coastguard Worker typeset -R20 y='. aẞ' 8786*7c356e86SAndroid Build Coastguard Worker print -r -- "<$x> (2$nl<12345678910 345678920$nl<$y> 2)" 8787*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8788*7c356e86SAndroid Build Coastguard Worker <. ak > (1 8789*7c356e86SAndroid Build Coastguard Worker <12345678910 345678920 8790*7c356e86SAndroid Build Coastguard Worker < . ak> 1) 8791*7c356e86SAndroid Build Coastguard Worker <. aẞ > (2 8792*7c356e86SAndroid Build Coastguard Worker <12345678910 345678920 8793*7c356e86SAndroid Build Coastguard Worker < . aẞ> 2) 8794*7c356e86SAndroid Build Coastguard Worker--- 8795*7c356e86SAndroid Build Coastguard Workername: utf8bom-1 8796*7c356e86SAndroid Build Coastguard Workerdescription: 8797*7c356e86SAndroid Build Coastguard Worker Check that the UTF-8 Byte Order Mark is ignored as the first 8798*7c356e86SAndroid Build Coastguard Worker multibyte character of the shell input (with -c, from standard 8799*7c356e86SAndroid Build Coastguard Worker input, as file, or as eval argument), but nowhere else 8800*7c356e86SAndroid Build Coastguard Worker# breaks on Mac OSX (HFS+ non-standard UTF-8 canonical decomposition) 8801*7c356e86SAndroid Build Coastguard Workercategory: !os:darwin,!shell:ebcdic-yes 8802*7c356e86SAndroid Build Coastguard Workerstdin: 8803*7c356e86SAndroid Build Coastguard Worker mkdir foo 8804*7c356e86SAndroid Build Coastguard Worker print '#!/bin/sh\necho ohne' >foo/fnord 8805*7c356e86SAndroid Build Coastguard Worker print '#!/bin/sh\necho mit' >foo/fnord 8806*7c356e86SAndroid Build Coastguard Worker print 'fnord\nfnord\nfnord\nfnord' >foo/bar 8807*7c356e86SAndroid Build Coastguard Worker print eval \''fnord\nfnord\nfnord\nfnord'\' >foo/zoo 8808*7c356e86SAndroid Build Coastguard Worker set -A anzahl -- foo/* 8809*7c356e86SAndroid Build Coastguard Worker echo got ${#anzahl[*]} files 8810*7c356e86SAndroid Build Coastguard Worker chmod +x foo/* 8811*7c356e86SAndroid Build Coastguard Worker export PATH=$(pwd)/foo$PATHSEP$PATH 8812*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'fnord' 8813*7c356e86SAndroid Build Coastguard Worker echo = 8814*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'fnord; fnord; fnord; fnord' 8815*7c356e86SAndroid Build Coastguard Worker echo = 8816*7c356e86SAndroid Build Coastguard Worker "$__progname" foo/bar 8817*7c356e86SAndroid Build Coastguard Worker echo = 8818*7c356e86SAndroid Build Coastguard Worker "$__progname" <foo/bar 8819*7c356e86SAndroid Build Coastguard Worker echo = 8820*7c356e86SAndroid Build Coastguard Worker "$__progname" foo/zoo 8821*7c356e86SAndroid Build Coastguard Worker echo = 8822*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'echo : $(fnord)' 8823*7c356e86SAndroid Build Coastguard Worker rm -rf foo 8824*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8825*7c356e86SAndroid Build Coastguard Worker got 4 files 8826*7c356e86SAndroid Build Coastguard Worker ohne 8827*7c356e86SAndroid Build Coastguard Worker = 8828*7c356e86SAndroid Build Coastguard Worker ohne 8829*7c356e86SAndroid Build Coastguard Worker ohne 8830*7c356e86SAndroid Build Coastguard Worker mit 8831*7c356e86SAndroid Build Coastguard Worker ohne 8832*7c356e86SAndroid Build Coastguard Worker = 8833*7c356e86SAndroid Build Coastguard Worker ohne 8834*7c356e86SAndroid Build Coastguard Worker ohne 8835*7c356e86SAndroid Build Coastguard Worker mit 8836*7c356e86SAndroid Build Coastguard Worker ohne 8837*7c356e86SAndroid Build Coastguard Worker = 8838*7c356e86SAndroid Build Coastguard Worker ohne 8839*7c356e86SAndroid Build Coastguard Worker ohne 8840*7c356e86SAndroid Build Coastguard Worker mit 8841*7c356e86SAndroid Build Coastguard Worker ohne 8842*7c356e86SAndroid Build Coastguard Worker = 8843*7c356e86SAndroid Build Coastguard Worker ohne 8844*7c356e86SAndroid Build Coastguard Worker ohne 8845*7c356e86SAndroid Build Coastguard Worker mit 8846*7c356e86SAndroid Build Coastguard Worker ohne 8847*7c356e86SAndroid Build Coastguard Worker = 8848*7c356e86SAndroid Build Coastguard Worker : ohne 8849*7c356e86SAndroid Build Coastguard Worker--- 8850*7c356e86SAndroid Build Coastguard Workername: utf8bom-2 8851*7c356e86SAndroid Build Coastguard Workerdescription: 8852*7c356e86SAndroid Build Coastguard Worker Check that we can execute BOM-shebangs (failures not fatal) 8853*7c356e86SAndroid Build Coastguard Worker XXX if the OS can already execute them, we lose 8854*7c356e86SAndroid Build Coastguard Worker note: cygwin execve(2) doesn't return to us with ENOEXEC, we lose 8855*7c356e86SAndroid Build Coastguard Worker note: Ultrix perl5 t4 returns 65280 (exit-code 255) and no text 8856*7c356e86SAndroid Build Coastguard Worker note: A/UX perl5 returns 6400 (exit-code 25), passes #1-3 8857*7c356e86SAndroid Build Coastguard Worker XXX fails when LD_PRELOAD is set with -e and Perl chokes it (ASan) 8858*7c356e86SAndroid Build Coastguard Workerneed-pass: no 8859*7c356e86SAndroid Build Coastguard Workercategory: !os:aux,!os:cygwin,!os:midipix,!os:msys,!os:ultrix,!os:uwin-nt,!smksh 8860*7c356e86SAndroid Build Coastguard Workerenv-setup: !FOO=BAR! 8861*7c356e86SAndroid Build Coastguard Workerstdin: 8862*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nprint "1 a=$ENV{FOO}";' >t1 8863*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nprint "2 a=$ENV{FOO}";' >t2 8864*7c356e86SAndroid Build Coastguard Worker print '#!'"$__perlname"'\nprint "3 a=$ENV{FOO}\n";' >t3 8865*7c356e86SAndroid Build Coastguard Worker print '#!'"$__perlname"'\nprint "4 a=$ENV{FOO}\n";' >t4 8866*7c356e86SAndroid Build Coastguard Worker chmod +x t? 8867*7c356e86SAndroid Build Coastguard Worker ./t1 8868*7c356e86SAndroid Build Coastguard Worker ./t2 8869*7c356e86SAndroid Build Coastguard Worker ./t3 8870*7c356e86SAndroid Build Coastguard Worker ./t4 8871*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8872*7c356e86SAndroid Build Coastguard Worker 1 a=/nonexistant{FOO} 8873*7c356e86SAndroid Build Coastguard Worker 2 a=/nonexistant{FOO} 8874*7c356e86SAndroid Build Coastguard Worker 3 a=BAR 8875*7c356e86SAndroid Build Coastguard Worker 4 a=BAR 8876*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 8877*7c356e86SAndroid Build Coastguard Worker /(Unrecognized character .... ignored at \..t4 line 1)*/ 8878*7c356e86SAndroid Build Coastguard Worker--- 8879*7c356e86SAndroid Build Coastguard Workername: utf8opt-1 8880*7c356e86SAndroid Build Coastguard Workerdescription: 8881*7c356e86SAndroid Build Coastguard Worker Check that the utf8-mode flag is not set at non-interactive startup 8882*7c356e86SAndroid Build Coastguard Workerenv-setup: !PS1=!PS2=!LC_CTYPE=@utflocale@! 8883*7c356e86SAndroid Build Coastguard Workerstdin: 8884*7c356e86SAndroid Build Coastguard Worker if [[ $- = *U* ]]; then 8885*7c356e86SAndroid Build Coastguard Worker echo is set 8886*7c356e86SAndroid Build Coastguard Worker else 8887*7c356e86SAndroid Build Coastguard Worker echo is not set 8888*7c356e86SAndroid Build Coastguard Worker fi 8889*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8890*7c356e86SAndroid Build Coastguard Worker is not set 8891*7c356e86SAndroid Build Coastguard Worker--- 8892*7c356e86SAndroid Build Coastguard Workername: utf8opt-2 8893*7c356e86SAndroid Build Coastguard Workerdescription: 8894*7c356e86SAndroid Build Coastguard Worker Check that the utf8-mode flag is set at interactive startup. 8895*7c356e86SAndroid Build Coastguard Worker If your OS is old, try passing HAVE_SETLOCALE_CTYPE=0 to Build.sh 8896*7c356e86SAndroid Build Coastguard Workerneed-pass: no 8897*7c356e86SAndroid Build Coastguard Workercategory: !noutf8 8898*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 8899*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 8900*7c356e86SAndroid Build Coastguard Workerenv-setup: !PS1=!PS2=!LC_CTYPE=@utflocale@! 8901*7c356e86SAndroid Build Coastguard Workerstdin: 8902*7c356e86SAndroid Build Coastguard Worker if [[ $- = *U* ]]; then 8903*7c356e86SAndroid Build Coastguard Worker echo is set 8904*7c356e86SAndroid Build Coastguard Worker else 8905*7c356e86SAndroid Build Coastguard Worker echo is not set 8906*7c356e86SAndroid Build Coastguard Worker fi 8907*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8908*7c356e86SAndroid Build Coastguard Worker is set 8909*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 8910*7c356e86SAndroid Build Coastguard Worker /(# )*/ 8911*7c356e86SAndroid Build Coastguard Worker--- 8912*7c356e86SAndroid Build Coastguard Workername: utf8opt-3a 8913*7c356e86SAndroid Build Coastguard Workerdescription: 8914*7c356e86SAndroid Build Coastguard Worker Ensure ±U on the command line is honoured 8915*7c356e86SAndroid Build Coastguard Worker (these two tests may pass falsely depending on CPPFLAGS) 8916*7c356e86SAndroid Build Coastguard Workerstdin: 8917*7c356e86SAndroid Build Coastguard Worker export i=0 8918*7c356e86SAndroid Build Coastguard Worker code='if [[ $- = *U* ]]; then echo $i on; else echo $i off; fi' 8919*7c356e86SAndroid Build Coastguard Worker let i++; "$__progname" -U -c "$code" 8920*7c356e86SAndroid Build Coastguard Worker let i++; "$__progname" +U -c "$code" 8921*7c356e86SAndroid Build Coastguard Worker echo $((++i)) done 8922*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8923*7c356e86SAndroid Build Coastguard Worker 1 on 8924*7c356e86SAndroid Build Coastguard Worker 2 off 8925*7c356e86SAndroid Build Coastguard Worker 3 done 8926*7c356e86SAndroid Build Coastguard Worker--- 8927*7c356e86SAndroid Build Coastguard Workername: utf8opt-3b 8928*7c356e86SAndroid Build Coastguard Workerdescription: 8929*7c356e86SAndroid Build Coastguard Worker Ensure ±U on the command line is honoured, interactive shells 8930*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 8931*7c356e86SAndroid Build Coastguard Workerstdin: 8932*7c356e86SAndroid Build Coastguard Worker export i=0 8933*7c356e86SAndroid Build Coastguard Worker code='if [[ $- = *U* ]]; then echo $i on; else echo $i off; fi' 8934*7c356e86SAndroid Build Coastguard Worker let i++; "$__progname" -U -ic "$code" 8935*7c356e86SAndroid Build Coastguard Worker let i++; "$__progname" +U -ic "$code" 8936*7c356e86SAndroid Build Coastguard Worker echo $((++i)) done 8937*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8938*7c356e86SAndroid Build Coastguard Worker 1 on 8939*7c356e86SAndroid Build Coastguard Worker 2 off 8940*7c356e86SAndroid Build Coastguard Worker 3 done 8941*7c356e86SAndroid Build Coastguard Worker--- 8942*7c356e86SAndroid Build Coastguard Workername: utf8bug-1 8943*7c356e86SAndroid Build Coastguard Workerdescription: 8944*7c356e86SAndroid Build Coastguard Worker Ensure trailing combining characters are not lost 8945*7c356e86SAndroid Build Coastguard Workerstdin: 8946*7c356e86SAndroid Build Coastguard Worker set -U 8947*7c356e86SAndroid Build Coastguard Worker a=a 8948*7c356e86SAndroid Build Coastguard Worker b=$'\u0301' 8949*7c356e86SAndroid Build Coastguard Worker x=$a$b 8950*7c356e86SAndroid Build Coastguard Worker print -r -- "<e$x>" 8951*7c356e86SAndroid Build Coastguard Worker x=$a 8952*7c356e86SAndroid Build Coastguard Worker x+=$b 8953*7c356e86SAndroid Build Coastguard Worker print -r -- "<e$x>" 8954*7c356e86SAndroid Build Coastguard Worker b=$'\u0301'b 8955*7c356e86SAndroid Build Coastguard Worker x=$a 8956*7c356e86SAndroid Build Coastguard Worker x+=$b 8957*7c356e86SAndroid Build Coastguard Worker print -r -- "<e$x>" 8958*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8959*7c356e86SAndroid Build Coastguard Worker <eá> 8960*7c356e86SAndroid Build Coastguard Worker <eá> 8961*7c356e86SAndroid Build Coastguard Worker <eáb> 8962*7c356e86SAndroid Build Coastguard Worker--- 8963*7c356e86SAndroid Build Coastguard Workername: aliases-1 8964*7c356e86SAndroid Build Coastguard Workerdescription: 8965*7c356e86SAndroid Build Coastguard Worker Check if built-in shell aliases are okay 8966*7c356e86SAndroid Build Coastguard Workerstdin: 8967*7c356e86SAndroid Build Coastguard Worker alias 8968*7c356e86SAndroid Build Coastguard Worker typeset -f 8969*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8970*7c356e86SAndroid Build Coastguard Worker autoload='\\builtin typeset -fu' 8971*7c356e86SAndroid Build Coastguard Worker functions='\\builtin typeset -f' 8972*7c356e86SAndroid Build Coastguard Worker hash='\\builtin alias -t' 8973*7c356e86SAndroid Build Coastguard Worker history='\\builtin fc -l' 8974*7c356e86SAndroid Build Coastguard Worker integer='\\builtin typeset -i' 8975*7c356e86SAndroid Build Coastguard Worker local='\\builtin typeset' 8976*7c356e86SAndroid Build Coastguard Worker login='\\builtin exec login' 8977*7c356e86SAndroid Build Coastguard Worker nameref='\\builtin typeset -n' 8978*7c356e86SAndroid Build Coastguard Worker nohup='nohup ' 8979*7c356e86SAndroid Build Coastguard Worker r='\\builtin fc -e -' 8980*7c356e86SAndroid Build Coastguard Worker type='\\builtin whence -v' 8981*7c356e86SAndroid Build Coastguard Worker--- 8982*7c356e86SAndroid Build Coastguard Workername: aliases-2b 8983*7c356e86SAndroid Build Coastguard Workerdescription: 8984*7c356e86SAndroid Build Coastguard Worker Check if “set -o sh” does not influence built-in aliases 8985*7c356e86SAndroid Build Coastguard Workerarguments: !-o!sh! 8986*7c356e86SAndroid Build Coastguard Workerstdin: 8987*7c356e86SAndroid Build Coastguard Worker alias 8988*7c356e86SAndroid Build Coastguard Worker typeset -f 8989*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 8990*7c356e86SAndroid Build Coastguard Worker autoload='\\builtin typeset -fu' 8991*7c356e86SAndroid Build Coastguard Worker functions='\\builtin typeset -f' 8992*7c356e86SAndroid Build Coastguard Worker hash='\\builtin alias -t' 8993*7c356e86SAndroid Build Coastguard Worker history='\\builtin fc -l' 8994*7c356e86SAndroid Build Coastguard Worker integer='\\builtin typeset -i' 8995*7c356e86SAndroid Build Coastguard Worker local='\\builtin typeset' 8996*7c356e86SAndroid Build Coastguard Worker login='\\builtin exec login' 8997*7c356e86SAndroid Build Coastguard Worker nameref='\\builtin typeset -n' 8998*7c356e86SAndroid Build Coastguard Worker nohup='nohup ' 8999*7c356e86SAndroid Build Coastguard Worker r='\\builtin fc -e -' 9000*7c356e86SAndroid Build Coastguard Worker type='\\builtin whence -v' 9001*7c356e86SAndroid Build Coastguard Worker--- 9002*7c356e86SAndroid Build Coastguard Workername: aliases-3b 9003*7c356e86SAndroid Build Coastguard Workerdescription: 9004*7c356e86SAndroid Build Coastguard Worker Check if running as sh does not influence built-in aliases 9005*7c356e86SAndroid Build Coastguard Workerstdin: 9006*7c356e86SAndroid Build Coastguard Worker cp "$__progname" sh 9007*7c356e86SAndroid Build Coastguard Worker ./sh -c 'alias; typeset -f' 9008*7c356e86SAndroid Build Coastguard Worker rm -f sh 9009*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9010*7c356e86SAndroid Build Coastguard Worker autoload='\\builtin typeset -fu' 9011*7c356e86SAndroid Build Coastguard Worker functions='\\builtin typeset -f' 9012*7c356e86SAndroid Build Coastguard Worker hash='\\builtin alias -t' 9013*7c356e86SAndroid Build Coastguard Worker history='\\builtin fc -l' 9014*7c356e86SAndroid Build Coastguard Worker integer='\\builtin typeset -i' 9015*7c356e86SAndroid Build Coastguard Worker local='\\builtin typeset' 9016*7c356e86SAndroid Build Coastguard Worker login='\\builtin exec login' 9017*7c356e86SAndroid Build Coastguard Worker nameref='\\builtin typeset -n' 9018*7c356e86SAndroid Build Coastguard Worker nohup='nohup ' 9019*7c356e86SAndroid Build Coastguard Worker r='\\builtin fc -e -' 9020*7c356e86SAndroid Build Coastguard Worker type='\\builtin whence -v' 9021*7c356e86SAndroid Build Coastguard Worker--- 9022*7c356e86SAndroid Build Coastguard Workername: aliases-cmdline 9023*7c356e86SAndroid Build Coastguard Workerdescription: 9024*7c356e86SAndroid Build Coastguard Worker Check that aliases work from the command line (Debian #517009) 9025*7c356e86SAndroid Build Coastguard Worker Note that due to the nature of the lexing process, defining 9026*7c356e86SAndroid Build Coastguard Worker aliases in COMSUBs then immediately using them, and things 9027*7c356e86SAndroid Build Coastguard Worker like 'alias foo=bar && foo', still fail. 9028*7c356e86SAndroid Build Coastguard Workerstdin: 9029*7c356e86SAndroid Build Coastguard Worker "$__progname" -c $'alias a="echo OK"\na' 9030*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9031*7c356e86SAndroid Build Coastguard Worker OK 9032*7c356e86SAndroid Build Coastguard Worker--- 9033*7c356e86SAndroid Build Coastguard Workername: aliases-funcdef-1 9034*7c356e86SAndroid Build Coastguard Workerdescription: 9035*7c356e86SAndroid Build Coastguard Worker Check if POSIX functions take precedences over aliases 9036*7c356e86SAndroid Build Coastguard Workerstdin: 9037*7c356e86SAndroid Build Coastguard Worker alias foo='echo makro' 9038*7c356e86SAndroid Build Coastguard Worker foo() { 9039*7c356e86SAndroid Build Coastguard Worker echo funktion 9040*7c356e86SAndroid Build Coastguard Worker } 9041*7c356e86SAndroid Build Coastguard Worker foo 9042*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9043*7c356e86SAndroid Build Coastguard Worker makro 9044*7c356e86SAndroid Build Coastguard Worker--- 9045*7c356e86SAndroid Build Coastguard Workername: aliases-funcdef-2 9046*7c356e86SAndroid Build Coastguard Workerdescription: 9047*7c356e86SAndroid Build Coastguard Worker Check if POSIX functions take precedences over aliases 9048*7c356e86SAndroid Build Coastguard Workerstdin: 9049*7c356e86SAndroid Build Coastguard Worker alias foo='echo makro' 9050*7c356e86SAndroid Build Coastguard Worker foo () { 9051*7c356e86SAndroid Build Coastguard Worker echo funktion 9052*7c356e86SAndroid Build Coastguard Worker } 9053*7c356e86SAndroid Build Coastguard Worker foo 9054*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9055*7c356e86SAndroid Build Coastguard Worker makro 9056*7c356e86SAndroid Build Coastguard Worker--- 9057*7c356e86SAndroid Build Coastguard Workername: aliases-funcdef-3 9058*7c356e86SAndroid Build Coastguard Workerdescription: 9059*7c356e86SAndroid Build Coastguard Worker Check if aliases take precedences over Korn functions 9060*7c356e86SAndroid Build Coastguard Workerstdin: 9061*7c356e86SAndroid Build Coastguard Worker alias foo='echo makro' 9062*7c356e86SAndroid Build Coastguard Worker function foo { 9063*7c356e86SAndroid Build Coastguard Worker echo funktion 9064*7c356e86SAndroid Build Coastguard Worker } 9065*7c356e86SAndroid Build Coastguard Worker foo 9066*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9067*7c356e86SAndroid Build Coastguard Worker makro 9068*7c356e86SAndroid Build Coastguard Worker--- 9069*7c356e86SAndroid Build Coastguard Workername: aliases-funcdef-4 9070*7c356e86SAndroid Build Coastguard Workerdescription: 9071*7c356e86SAndroid Build Coastguard Worker Functions should only take over if actually being defined 9072*7c356e86SAndroid Build Coastguard Workerstdin: 9073*7c356e86SAndroid Build Coastguard Worker alias local 9074*7c356e86SAndroid Build Coastguard Worker :|| local() { :; } 9075*7c356e86SAndroid Build Coastguard Worker alias local 9076*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9077*7c356e86SAndroid Build Coastguard Worker local='\\builtin typeset' 9078*7c356e86SAndroid Build Coastguard Worker local='\\builtin typeset' 9079*7c356e86SAndroid Build Coastguard Worker--- 9080*7c356e86SAndroid Build Coastguard Workername: arrays-1 9081*7c356e86SAndroid Build Coastguard Workerdescription: 9082*7c356e86SAndroid Build Coastguard Worker Check if Korn Shell arrays work as expected 9083*7c356e86SAndroid Build Coastguard Workerstdin: 9084*7c356e86SAndroid Build Coastguard Worker v="c d" 9085*7c356e86SAndroid Build Coastguard Worker set -A foo -- a \$v "$v" '$v' b 9086*7c356e86SAndroid Build Coastguard Worker echo "${#foo[*]}|${foo[0]}|${foo[1]}|${foo[2]}|${foo[3]}|${foo[4]}|" 9087*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9088*7c356e86SAndroid Build Coastguard Worker 5|a|$v|c d|$v|b| 9089*7c356e86SAndroid Build Coastguard Worker--- 9090*7c356e86SAndroid Build Coastguard Workername: arrays-2a 9091*7c356e86SAndroid Build Coastguard Workerdescription: 9092*7c356e86SAndroid Build Coastguard Worker Check if bash-style arrays work as expected 9093*7c356e86SAndroid Build Coastguard Workerstdin: 9094*7c356e86SAndroid Build Coastguard Worker v="c d" 9095*7c356e86SAndroid Build Coastguard Worker foo=(a \$v "$v" '$v' b) 9096*7c356e86SAndroid Build Coastguard Worker echo "${#foo[*]}|${foo[0]}|${foo[1]}|${foo[2]}|${foo[3]}|${foo[4]}|" 9097*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9098*7c356e86SAndroid Build Coastguard Worker 5|a|$v|c d|$v|b| 9099*7c356e86SAndroid Build Coastguard Worker--- 9100*7c356e86SAndroid Build Coastguard Workername: arrays-2b 9101*7c356e86SAndroid Build Coastguard Workerdescription: 9102*7c356e86SAndroid Build Coastguard Worker Check if bash-style arrays work as expected, with newlines 9103*7c356e86SAndroid Build Coastguard Workerstdin: 9104*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nfor x in "$@"; do print -nr -- "$x|"; done' >pfp 9105*7c356e86SAndroid Build Coastguard Worker chmod +x pfp 9106*7c356e86SAndroid Build Coastguard Worker test -n "$ZSH_VERSION" && setopt KSH_ARRAYS 9107*7c356e86SAndroid Build Coastguard Worker v="e f" 9108*7c356e86SAndroid Build Coastguard Worker foo=(a 9109*7c356e86SAndroid Build Coastguard Worker bc 9110*7c356e86SAndroid Build Coastguard Worker d \$v "$v" '$v' g 9111*7c356e86SAndroid Build Coastguard Worker ) 9112*7c356e86SAndroid Build Coastguard Worker ./pfp "${#foo[*]}" "${foo[0]}" "${foo[1]}" "${foo[2]}" "${foo[3]}" "${foo[4]}" "${foo[5]}" "${foo[6]}"; echo 9113*7c356e86SAndroid Build Coastguard Worker foo=(a\ 9114*7c356e86SAndroid Build Coastguard Worker bc 9115*7c356e86SAndroid Build Coastguard Worker d \$v "$v" '$v' g 9116*7c356e86SAndroid Build Coastguard Worker ) 9117*7c356e86SAndroid Build Coastguard Worker ./pfp "${#foo[*]}" "${foo[0]}" "${foo[1]}" "${foo[2]}" "${foo[3]}" "${foo[4]}" "${foo[5]}" "${foo[6]}"; echo 9118*7c356e86SAndroid Build Coastguard Worker foo=(a\ 9119*7c356e86SAndroid Build Coastguard Worker bc\\ 9120*7c356e86SAndroid Build Coastguard Worker d \$v "$v" '$v' 9121*7c356e86SAndroid Build Coastguard Worker g) 9122*7c356e86SAndroid Build Coastguard Worker ./pfp "${#foo[*]}" "${foo[0]}" "${foo[1]}" "${foo[2]}" "${foo[3]}" "${foo[4]}" "${foo[5]}" "${foo[6]}"; echo 9123*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9124*7c356e86SAndroid Build Coastguard Worker 7|a|bc|d|$v|e f|$v|g| 9125*7c356e86SAndroid Build Coastguard Worker 7|a|bc|d|$v|e f|$v|g| 9126*7c356e86SAndroid Build Coastguard Worker 6|abc\|d|$v|e f|$v|g|| 9127*7c356e86SAndroid Build Coastguard Worker--- 9128*7c356e86SAndroid Build Coastguard Workername: arrays-3 9129*7c356e86SAndroid Build Coastguard Workerdescription: 9130*7c356e86SAndroid Build Coastguard Worker Check if array bounds are uint32_t 9131*7c356e86SAndroid Build Coastguard Workerstdin: 9132*7c356e86SAndroid Build Coastguard Worker set -A foo a b c 9133*7c356e86SAndroid Build Coastguard Worker foo[4097]=d 9134*7c356e86SAndroid Build Coastguard Worker foo[2147483637]=e 9135*7c356e86SAndroid Build Coastguard Worker echo ${foo[*]} 9136*7c356e86SAndroid Build Coastguard Worker foo[-1]=f 9137*7c356e86SAndroid Build Coastguard Worker echo ${foo[4294967295]} g ${foo[*]} 9138*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9139*7c356e86SAndroid Build Coastguard Worker a b c d e 9140*7c356e86SAndroid Build Coastguard Worker f g a b c d e f 9141*7c356e86SAndroid Build Coastguard Worker--- 9142*7c356e86SAndroid Build Coastguard Workername: arrays-4 9143*7c356e86SAndroid Build Coastguard Workerdescription: 9144*7c356e86SAndroid Build Coastguard Worker Check if Korn Shell arrays with specified indices work as expected 9145*7c356e86SAndroid Build Coastguard Workerstdin: 9146*7c356e86SAndroid Build Coastguard Worker v="c d" 9147*7c356e86SAndroid Build Coastguard Worker set -A foo -- [1]=\$v [2]="$v" [4]='$v' [0]=a [5]=b 9148*7c356e86SAndroid Build Coastguard Worker echo "${#foo[*]}|${foo[0]}|${foo[1]}|${foo[2]}|${foo[3]}|${foo[4]}|${foo[5]}|" 9149*7c356e86SAndroid Build Coastguard Worker # we don't want this at all: 9150*7c356e86SAndroid Build Coastguard Worker # 5|a|$v|c d||$v|b| 9151*7c356e86SAndroid Build Coastguard Worker set -A arr "[5]=meh" 9152*7c356e86SAndroid Build Coastguard Worker echo "<${arr[0]}><${arr[5]}>" 9153*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9154*7c356e86SAndroid Build Coastguard Worker 5|[1]=$v|[2]=c d|[4]=$v|[0]=a|[5]=b|| 9155*7c356e86SAndroid Build Coastguard Worker <[5]=meh><> 9156*7c356e86SAndroid Build Coastguard Worker--- 9157*7c356e86SAndroid Build Coastguard Workername: arrays-5 9158*7c356e86SAndroid Build Coastguard Workerdescription: 9159*7c356e86SAndroid Build Coastguard Worker Check if bash-style arrays with specified indices work as expected 9160*7c356e86SAndroid Build Coastguard Worker (taken out temporarily to fix arrays-4; see also arrays-9a comment) 9161*7c356e86SAndroid Build Coastguard Workercategory: disabled 9162*7c356e86SAndroid Build Coastguard Workerstdin: 9163*7c356e86SAndroid Build Coastguard Worker v="c d" 9164*7c356e86SAndroid Build Coastguard Worker foo=([1]=\$v [2]="$v" [4]='$v' [0]=a [5]=b) 9165*7c356e86SAndroid Build Coastguard Worker echo "${#foo[*]}|${foo[0]}|${foo[1]}|${foo[2]}|${foo[3]}|${foo[4]}|${foo[5]}|" 9166*7c356e86SAndroid Build Coastguard Worker x=([128]=foo bar baz) 9167*7c356e86SAndroid Build Coastguard Worker echo k= ${!x[*]} . 9168*7c356e86SAndroid Build Coastguard Worker echo v= ${x[*]} . 9169*7c356e86SAndroid Build Coastguard Worker # Check that we do not break this by globbing 9170*7c356e86SAndroid Build Coastguard Worker :>b=blah 9171*7c356e86SAndroid Build Coastguard Worker bleh=5 9172*7c356e86SAndroid Build Coastguard Worker typeset -a arr 9173*7c356e86SAndroid Build Coastguard Worker arr+=([bleh]=blah) 9174*7c356e86SAndroid Build Coastguard Worker echo "<${arr[0]}><${arr[5]}>" 9175*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9176*7c356e86SAndroid Build Coastguard Worker 5|a|$v|c d||$v|b| 9177*7c356e86SAndroid Build Coastguard Worker k= 128 129 130 . 9178*7c356e86SAndroid Build Coastguard Worker v= foo bar baz . 9179*7c356e86SAndroid Build Coastguard Worker <><blah> 9180*7c356e86SAndroid Build Coastguard Worker--- 9181*7c356e86SAndroid Build Coastguard Workername: arrays-6 9182*7c356e86SAndroid Build Coastguard Workerdescription: 9183*7c356e86SAndroid Build Coastguard Worker Check if we can get the array keys (indices) for indexed arrays, 9184*7c356e86SAndroid Build Coastguard Worker Korn shell style 9185*7c356e86SAndroid Build Coastguard Workerstdin: 9186*7c356e86SAndroid Build Coastguard Worker of() { 9187*7c356e86SAndroid Build Coastguard Worker i=0 9188*7c356e86SAndroid Build Coastguard Worker for x in "$@"; do 9189*7c356e86SAndroid Build Coastguard Worker echo -n "$((i++))<$x>" 9190*7c356e86SAndroid Build Coastguard Worker done 9191*7c356e86SAndroid Build Coastguard Worker echo 9192*7c356e86SAndroid Build Coastguard Worker } 9193*7c356e86SAndroid Build Coastguard Worker foo[1]=eins 9194*7c356e86SAndroid Build Coastguard Worker set | grep '^foo' 9195*7c356e86SAndroid Build Coastguard Worker echo = 9196*7c356e86SAndroid Build Coastguard Worker foo[0]=zwei 9197*7c356e86SAndroid Build Coastguard Worker foo[4]=drei 9198*7c356e86SAndroid Build Coastguard Worker set | grep '^foo' 9199*7c356e86SAndroid Build Coastguard Worker echo = 9200*7c356e86SAndroid Build Coastguard Worker echo a $(of ${foo[*]}) = $(of ${bar[*]}) a 9201*7c356e86SAndroid Build Coastguard Worker echo b $(of "${foo[*]}") = $(of "${bar[*]}") b 9202*7c356e86SAndroid Build Coastguard Worker echo c $(of ${foo[@]}) = $(of ${bar[@]}) c 9203*7c356e86SAndroid Build Coastguard Worker echo d $(of "${foo[@]}") = $(of "${bar[@]}") d 9204*7c356e86SAndroid Build Coastguard Worker echo e $(of ${!foo[*]}) = $(of ${!bar[*]}) e 9205*7c356e86SAndroid Build Coastguard Worker echo f $(of "${!foo[*]}") = $(of "${!bar[*]}") f 9206*7c356e86SAndroid Build Coastguard Worker echo g $(of ${!foo[@]}) = $(of ${!bar[@]}) g 9207*7c356e86SAndroid Build Coastguard Worker echo h $(of "${!foo[@]}") = $(of "${!bar[@]}") h 9208*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9209*7c356e86SAndroid Build Coastguard Worker foo[1]=eins 9210*7c356e86SAndroid Build Coastguard Worker = 9211*7c356e86SAndroid Build Coastguard Worker foo[0]=zwei 9212*7c356e86SAndroid Build Coastguard Worker foo[1]=eins 9213*7c356e86SAndroid Build Coastguard Worker foo[4]=drei 9214*7c356e86SAndroid Build Coastguard Worker = 9215*7c356e86SAndroid Build Coastguard Worker a 0<zwei>1<eins>2<drei> = a 9216*7c356e86SAndroid Build Coastguard Worker b 0<zwei eins drei> = 0<> b 9217*7c356e86SAndroid Build Coastguard Worker c 0<zwei>1<eins>2<drei> = c 9218*7c356e86SAndroid Build Coastguard Worker d 0<zwei>1<eins>2<drei> = d 9219*7c356e86SAndroid Build Coastguard Worker e 0<0>1<1>2<4> = e 9220*7c356e86SAndroid Build Coastguard Worker f 0<0 1 4> = 0<> f 9221*7c356e86SAndroid Build Coastguard Worker g 0<0>1<1>2<4> = g 9222*7c356e86SAndroid Build Coastguard Worker h 0<0>1<1>2<4> = h 9223*7c356e86SAndroid Build Coastguard Worker--- 9224*7c356e86SAndroid Build Coastguard Workername: arrays-7 9225*7c356e86SAndroid Build Coastguard Workerdescription: 9226*7c356e86SAndroid Build Coastguard Worker Check if we can get the array keys (indices) for indexed arrays, 9227*7c356e86SAndroid Build Coastguard Worker Korn shell style, in some corner cases 9228*7c356e86SAndroid Build Coastguard Workerstdin: 9229*7c356e86SAndroid Build Coastguard Worker echo !arz: ${!arz} 9230*7c356e86SAndroid Build Coastguard Worker echo !arz[0]: ${!arz[0]} 9231*7c356e86SAndroid Build Coastguard Worker echo !arz[1]: ${!arz[1]} 9232*7c356e86SAndroid Build Coastguard Worker arz=foo 9233*7c356e86SAndroid Build Coastguard Worker echo !arz: ${!arz} 9234*7c356e86SAndroid Build Coastguard Worker echo !arz[0]: ${!arz[0]} 9235*7c356e86SAndroid Build Coastguard Worker echo !arz[1]: ${!arz[1]} 9236*7c356e86SAndroid Build Coastguard Worker unset arz 9237*7c356e86SAndroid Build Coastguard Worker echo !arz: ${!arz} 9238*7c356e86SAndroid Build Coastguard Worker echo !arz[0]: ${!arz[0]} 9239*7c356e86SAndroid Build Coastguard Worker echo !arz[1]: ${!arz[1]} 9240*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9241*7c356e86SAndroid Build Coastguard Worker !arz: arz 9242*7c356e86SAndroid Build Coastguard Worker !arz[0]: arz[0] 9243*7c356e86SAndroid Build Coastguard Worker !arz[1]: arz[1] 9244*7c356e86SAndroid Build Coastguard Worker !arz: arz 9245*7c356e86SAndroid Build Coastguard Worker !arz[0]: arz[0] 9246*7c356e86SAndroid Build Coastguard Worker !arz[1]: arz[1] 9247*7c356e86SAndroid Build Coastguard Worker !arz: arz 9248*7c356e86SAndroid Build Coastguard Worker !arz[0]: arz[0] 9249*7c356e86SAndroid Build Coastguard Worker !arz[1]: arz[1] 9250*7c356e86SAndroid Build Coastguard Worker--- 9251*7c356e86SAndroid Build Coastguard Workername: arrays-8 9252*7c356e86SAndroid Build Coastguard Workerdescription: 9253*7c356e86SAndroid Build Coastguard Worker Check some behavioural rules for arrays. 9254*7c356e86SAndroid Build Coastguard Workerstdin: 9255*7c356e86SAndroid Build Coastguard Worker fna() { 9256*7c356e86SAndroid Build Coastguard Worker set -A aa 9 9257*7c356e86SAndroid Build Coastguard Worker } 9258*7c356e86SAndroid Build Coastguard Worker fnb() { 9259*7c356e86SAndroid Build Coastguard Worker typeset ab 9260*7c356e86SAndroid Build Coastguard Worker set -A ab 9 9261*7c356e86SAndroid Build Coastguard Worker } 9262*7c356e86SAndroid Build Coastguard Worker fnc() { 9263*7c356e86SAndroid Build Coastguard Worker typeset ac 9264*7c356e86SAndroid Build Coastguard Worker set -A ac 91 9265*7c356e86SAndroid Build Coastguard Worker unset ac 9266*7c356e86SAndroid Build Coastguard Worker set -A ac 92 9267*7c356e86SAndroid Build Coastguard Worker } 9268*7c356e86SAndroid Build Coastguard Worker fnd() { 9269*7c356e86SAndroid Build Coastguard Worker set +A ad 9 9270*7c356e86SAndroid Build Coastguard Worker } 9271*7c356e86SAndroid Build Coastguard Worker fne() { 9272*7c356e86SAndroid Build Coastguard Worker unset ae 9273*7c356e86SAndroid Build Coastguard Worker set +A ae 9 9274*7c356e86SAndroid Build Coastguard Worker } 9275*7c356e86SAndroid Build Coastguard Worker fnf() { 9276*7c356e86SAndroid Build Coastguard Worker unset af[0] 9277*7c356e86SAndroid Build Coastguard Worker set +A af 9 9278*7c356e86SAndroid Build Coastguard Worker } 9279*7c356e86SAndroid Build Coastguard Worker fng() { 9280*7c356e86SAndroid Build Coastguard Worker unset ag[*] 9281*7c356e86SAndroid Build Coastguard Worker set +A ag 9 9282*7c356e86SAndroid Build Coastguard Worker } 9283*7c356e86SAndroid Build Coastguard Worker set -A aa 1 2 9284*7c356e86SAndroid Build Coastguard Worker set -A ab 1 2 9285*7c356e86SAndroid Build Coastguard Worker set -A ac 1 2 9286*7c356e86SAndroid Build Coastguard Worker set -A ad 1 2 9287*7c356e86SAndroid Build Coastguard Worker set -A ae 1 2 9288*7c356e86SAndroid Build Coastguard Worker set -A af 1 2 9289*7c356e86SAndroid Build Coastguard Worker set -A ag 1 2 9290*7c356e86SAndroid Build Coastguard Worker set -A ah 1 2 9291*7c356e86SAndroid Build Coastguard Worker typeset -Z3 aa ab ac ad ae af ag 9292*7c356e86SAndroid Build Coastguard Worker print 1a ${aa[*]} . 9293*7c356e86SAndroid Build Coastguard Worker print 1b ${ab[*]} . 9294*7c356e86SAndroid Build Coastguard Worker print 1c ${ac[*]} . 9295*7c356e86SAndroid Build Coastguard Worker print 1d ${ad[*]} . 9296*7c356e86SAndroid Build Coastguard Worker print 1e ${ae[*]} . 9297*7c356e86SAndroid Build Coastguard Worker print 1f ${af[*]} . 9298*7c356e86SAndroid Build Coastguard Worker print 1g ${ag[*]} . 9299*7c356e86SAndroid Build Coastguard Worker print 1h ${ah[*]} . 9300*7c356e86SAndroid Build Coastguard Worker fna 9301*7c356e86SAndroid Build Coastguard Worker fnb 9302*7c356e86SAndroid Build Coastguard Worker fnc 9303*7c356e86SAndroid Build Coastguard Worker fnd 9304*7c356e86SAndroid Build Coastguard Worker fne 9305*7c356e86SAndroid Build Coastguard Worker fnf 9306*7c356e86SAndroid Build Coastguard Worker fng 9307*7c356e86SAndroid Build Coastguard Worker typeset -Z5 ah[*] 9308*7c356e86SAndroid Build Coastguard Worker print 2a ${aa[*]} . 9309*7c356e86SAndroid Build Coastguard Worker print 2b ${ab[*]} . 9310*7c356e86SAndroid Build Coastguard Worker print 2c ${ac[*]} . 9311*7c356e86SAndroid Build Coastguard Worker print 2d ${ad[*]} . 9312*7c356e86SAndroid Build Coastguard Worker print 2e ${ae[*]} . 9313*7c356e86SAndroid Build Coastguard Worker print 2f ${af[*]} . 9314*7c356e86SAndroid Build Coastguard Worker print 2g ${ag[*]} . 9315*7c356e86SAndroid Build Coastguard Worker print 2h ${ah[*]} . 9316*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9317*7c356e86SAndroid Build Coastguard Worker 1a 001 002 . 9318*7c356e86SAndroid Build Coastguard Worker 1b 001 002 . 9319*7c356e86SAndroid Build Coastguard Worker 1c 001 002 . 9320*7c356e86SAndroid Build Coastguard Worker 1d 001 002 . 9321*7c356e86SAndroid Build Coastguard Worker 1e 001 002 . 9322*7c356e86SAndroid Build Coastguard Worker 1f 001 002 . 9323*7c356e86SAndroid Build Coastguard Worker 1g 001 002 . 9324*7c356e86SAndroid Build Coastguard Worker 1h 1 2 . 9325*7c356e86SAndroid Build Coastguard Worker 2a 9 . 9326*7c356e86SAndroid Build Coastguard Worker 2b 001 002 . 9327*7c356e86SAndroid Build Coastguard Worker 2c 92 . 9328*7c356e86SAndroid Build Coastguard Worker 2d 009 002 . 9329*7c356e86SAndroid Build Coastguard Worker 2e 9 . 9330*7c356e86SAndroid Build Coastguard Worker 2f 9 002 . 9331*7c356e86SAndroid Build Coastguard Worker 2g 009 . 9332*7c356e86SAndroid Build Coastguard Worker 2h 00001 00002 . 9333*7c356e86SAndroid Build Coastguard Worker--- 9334*7c356e86SAndroid Build Coastguard Workername: arrays-9a 9335*7c356e86SAndroid Build Coastguard Workerdescription: 9336*7c356e86SAndroid Build Coastguard Worker Check that we can concatenate arrays 9337*7c356e86SAndroid Build Coastguard Workerstdin: 9338*7c356e86SAndroid Build Coastguard Worker unset foo; foo=(bar); foo+=(baz); echo 1 ${!foo[*]} : ${foo[*]} . 9339*7c356e86SAndroid Build Coastguard Worker unset foo; foo=(foo bar); foo+=(baz); echo 2 ${!foo[*]} : ${foo[*]} . 9340*7c356e86SAndroid Build Coastguard Worker# unset foo; foo=([2]=foo [0]=bar); foo+=(baz [5]=quux); echo 3 ${!foo[*]} : ${foo[*]} . 9341*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9342*7c356e86SAndroid Build Coastguard Worker 1 0 1 : bar baz . 9343*7c356e86SAndroid Build Coastguard Worker 2 0 1 2 : foo bar baz . 9344*7c356e86SAndroid Build Coastguard Worker# 3 0 2 3 5 : bar foo baz quux . 9345*7c356e86SAndroid Build Coastguard Worker--- 9346*7c356e86SAndroid Build Coastguard Workername: arrays-9b 9347*7c356e86SAndroid Build Coastguard Workerdescription: 9348*7c356e86SAndroid Build Coastguard Worker Check that we can concatenate parameters too 9349*7c356e86SAndroid Build Coastguard Workerstdin: 9350*7c356e86SAndroid Build Coastguard Worker unset foo; foo=bar; foo+=baz; echo 1 $foo . 9351*7c356e86SAndroid Build Coastguard Worker unset foo; typeset -i16 foo=10; foo+=20; echo 2 $foo . 9352*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9353*7c356e86SAndroid Build Coastguard Worker 1 barbaz . 9354*7c356e86SAndroid Build Coastguard Worker 2 16#a20 . 9355*7c356e86SAndroid Build Coastguard Worker--- 9356*7c356e86SAndroid Build Coastguard Workername: arrassign-basic 9357*7c356e86SAndroid Build Coastguard Workerdescription: 9358*7c356e86SAndroid Build Coastguard Worker Check basic whitespace conserving properties of wdarrassign 9359*7c356e86SAndroid Build Coastguard Workerstdin: 9360*7c356e86SAndroid Build Coastguard Worker a=($(echo a b)) 9361*7c356e86SAndroid Build Coastguard Worker b=($(echo "a b")) 9362*7c356e86SAndroid Build Coastguard Worker c=("$(echo "a b")") 9363*7c356e86SAndroid Build Coastguard Worker d=("$(echo a b)") 9364*7c356e86SAndroid Build Coastguard Worker a+=($(echo c d)) 9365*7c356e86SAndroid Build Coastguard Worker b+=($(echo "c d")) 9366*7c356e86SAndroid Build Coastguard Worker c+=("$(echo "c d")") 9367*7c356e86SAndroid Build Coastguard Worker d+=("$(echo c d)") 9368*7c356e86SAndroid Build Coastguard Worker echo ".a:${a[0]}.${a[1]}.${a[2]}.${a[3]}:" 9369*7c356e86SAndroid Build Coastguard Worker echo ".b:${b[0]}.${b[1]}.${b[2]}.${b[3]}:" 9370*7c356e86SAndroid Build Coastguard Worker echo ".c:${c[0]}.${c[1]}.${c[2]}.${c[3]}:" 9371*7c356e86SAndroid Build Coastguard Worker echo ".d:${d[0]}.${d[1]}.${d[2]}.${d[3]}:" 9372*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9373*7c356e86SAndroid Build Coastguard Worker .a:a.b.c.d: 9374*7c356e86SAndroid Build Coastguard Worker .b:a.b.c.d: 9375*7c356e86SAndroid Build Coastguard Worker .c:a b.c d..: 9376*7c356e86SAndroid Build Coastguard Worker .d:a b.c d..: 9377*7c356e86SAndroid Build Coastguard Worker--- 9378*7c356e86SAndroid Build Coastguard Workername: arrassign-eol 9379*7c356e86SAndroid Build Coastguard Workerdescription: 9380*7c356e86SAndroid Build Coastguard Worker Commands after array assignments are not permitted 9381*7c356e86SAndroid Build Coastguard Workerstdin: 9382*7c356e86SAndroid Build Coastguard Worker foo=(a b) env 9383*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 9384*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 9385*7c356e86SAndroid Build Coastguard Worker /syntax error: unexpected 'env'/ 9386*7c356e86SAndroid Build Coastguard Worker--- 9387*7c356e86SAndroid Build Coastguard Workername: arrassign-fnc-none 9388*7c356e86SAndroid Build Coastguard Workerdescription: 9389*7c356e86SAndroid Build Coastguard Worker Check locality of array access inside a function 9390*7c356e86SAndroid Build Coastguard Workerstdin: 9391*7c356e86SAndroid Build Coastguard Worker function fn { 9392*7c356e86SAndroid Build Coastguard Worker x+=(f) 9393*7c356e86SAndroid Build Coastguard Worker echo ".fn:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9394*7c356e86SAndroid Build Coastguard Worker } 9395*7c356e86SAndroid Build Coastguard Worker function rfn { 9396*7c356e86SAndroid Build Coastguard Worker if [[ -n $BASH_VERSION ]]; then 9397*7c356e86SAndroid Build Coastguard Worker y=() 9398*7c356e86SAndroid Build Coastguard Worker else 9399*7c356e86SAndroid Build Coastguard Worker set -A y 9400*7c356e86SAndroid Build Coastguard Worker fi 9401*7c356e86SAndroid Build Coastguard Worker y+=(f) 9402*7c356e86SAndroid Build Coastguard Worker echo ".rfn:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9403*7c356e86SAndroid Build Coastguard Worker } 9404*7c356e86SAndroid Build Coastguard Worker x=(m m) 9405*7c356e86SAndroid Build Coastguard Worker y=(m m) 9406*7c356e86SAndroid Build Coastguard Worker echo ".f0:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9407*7c356e86SAndroid Build Coastguard Worker fn 9408*7c356e86SAndroid Build Coastguard Worker echo ".f1:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9409*7c356e86SAndroid Build Coastguard Worker fn 9410*7c356e86SAndroid Build Coastguard Worker echo ".f2:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9411*7c356e86SAndroid Build Coastguard Worker echo ".rf0:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9412*7c356e86SAndroid Build Coastguard Worker rfn 9413*7c356e86SAndroid Build Coastguard Worker echo ".rf1:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9414*7c356e86SAndroid Build Coastguard Worker rfn 9415*7c356e86SAndroid Build Coastguard Worker echo ".rf2:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9416*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9417*7c356e86SAndroid Build Coastguard Worker .f0:m.m..: 9418*7c356e86SAndroid Build Coastguard Worker .fn:m.m.f.: 9419*7c356e86SAndroid Build Coastguard Worker .f1:m.m.f.: 9420*7c356e86SAndroid Build Coastguard Worker .fn:m.m.f.f: 9421*7c356e86SAndroid Build Coastguard Worker .f2:m.m.f.f: 9422*7c356e86SAndroid Build Coastguard Worker .rf0:m.m..: 9423*7c356e86SAndroid Build Coastguard Worker .rfn:f...: 9424*7c356e86SAndroid Build Coastguard Worker .rf1:f...: 9425*7c356e86SAndroid Build Coastguard Worker .rfn:f...: 9426*7c356e86SAndroid Build Coastguard Worker .rf2:f...: 9427*7c356e86SAndroid Build Coastguard Worker--- 9428*7c356e86SAndroid Build Coastguard Workername: arrassign-fnc-local 9429*7c356e86SAndroid Build Coastguard Workerdescription: 9430*7c356e86SAndroid Build Coastguard Worker Check locality of array access inside a function 9431*7c356e86SAndroid Build Coastguard Worker with the bash/mksh/ksh93 local/typeset keyword 9432*7c356e86SAndroid Build Coastguard Worker (note: ksh93 has no local; typeset works only in FKSH) 9433*7c356e86SAndroid Build Coastguard Workerstdin: 9434*7c356e86SAndroid Build Coastguard Worker function fn { 9435*7c356e86SAndroid Build Coastguard Worker typeset x 9436*7c356e86SAndroid Build Coastguard Worker x+=(f) 9437*7c356e86SAndroid Build Coastguard Worker echo ".fn:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9438*7c356e86SAndroid Build Coastguard Worker } 9439*7c356e86SAndroid Build Coastguard Worker function rfn { 9440*7c356e86SAndroid Build Coastguard Worker if [[ -n $BASH_VERSION ]]; then 9441*7c356e86SAndroid Build Coastguard Worker y=() 9442*7c356e86SAndroid Build Coastguard Worker else 9443*7c356e86SAndroid Build Coastguard Worker set -A y 9444*7c356e86SAndroid Build Coastguard Worker fi 9445*7c356e86SAndroid Build Coastguard Worker typeset y 9446*7c356e86SAndroid Build Coastguard Worker y+=(f) 9447*7c356e86SAndroid Build Coastguard Worker echo ".rfn:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9448*7c356e86SAndroid Build Coastguard Worker } 9449*7c356e86SAndroid Build Coastguard Worker function fnr { 9450*7c356e86SAndroid Build Coastguard Worker typeset z 9451*7c356e86SAndroid Build Coastguard Worker if [[ -n $BASH_VERSION ]]; then 9452*7c356e86SAndroid Build Coastguard Worker z=() 9453*7c356e86SAndroid Build Coastguard Worker else 9454*7c356e86SAndroid Build Coastguard Worker set -A z 9455*7c356e86SAndroid Build Coastguard Worker fi 9456*7c356e86SAndroid Build Coastguard Worker z+=(f) 9457*7c356e86SAndroid Build Coastguard Worker echo ".fnr:${z[0]}.${z[1]}.${z[2]}.${z[3]}:" 9458*7c356e86SAndroid Build Coastguard Worker } 9459*7c356e86SAndroid Build Coastguard Worker x=(m m) 9460*7c356e86SAndroid Build Coastguard Worker y=(m m) 9461*7c356e86SAndroid Build Coastguard Worker z=(m m) 9462*7c356e86SAndroid Build Coastguard Worker echo ".f0:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9463*7c356e86SAndroid Build Coastguard Worker fn 9464*7c356e86SAndroid Build Coastguard Worker echo ".f1:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9465*7c356e86SAndroid Build Coastguard Worker fn 9466*7c356e86SAndroid Build Coastguard Worker echo ".f2:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9467*7c356e86SAndroid Build Coastguard Worker echo ".rf0:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9468*7c356e86SAndroid Build Coastguard Worker rfn 9469*7c356e86SAndroid Build Coastguard Worker echo ".rf1:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9470*7c356e86SAndroid Build Coastguard Worker rfn 9471*7c356e86SAndroid Build Coastguard Worker echo ".rf2:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9472*7c356e86SAndroid Build Coastguard Worker echo ".f0r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:" 9473*7c356e86SAndroid Build Coastguard Worker fnr 9474*7c356e86SAndroid Build Coastguard Worker echo ".f1r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:" 9475*7c356e86SAndroid Build Coastguard Worker fnr 9476*7c356e86SAndroid Build Coastguard Worker echo ".f2r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:" 9477*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9478*7c356e86SAndroid Build Coastguard Worker .f0:m.m..: 9479*7c356e86SAndroid Build Coastguard Worker .fn:f...: 9480*7c356e86SAndroid Build Coastguard Worker .f1:m.m..: 9481*7c356e86SAndroid Build Coastguard Worker .fn:f...: 9482*7c356e86SAndroid Build Coastguard Worker .f2:m.m..: 9483*7c356e86SAndroid Build Coastguard Worker .rf0:m.m..: 9484*7c356e86SAndroid Build Coastguard Worker .rfn:f...: 9485*7c356e86SAndroid Build Coastguard Worker .rf1:...: 9486*7c356e86SAndroid Build Coastguard Worker .rfn:f...: 9487*7c356e86SAndroid Build Coastguard Worker .rf2:...: 9488*7c356e86SAndroid Build Coastguard Worker .f0r:m.m..: 9489*7c356e86SAndroid Build Coastguard Worker .fnr:f...: 9490*7c356e86SAndroid Build Coastguard Worker .f1r:m.m..: 9491*7c356e86SAndroid Build Coastguard Worker .fnr:f...: 9492*7c356e86SAndroid Build Coastguard Worker .f2r:m.m..: 9493*7c356e86SAndroid Build Coastguard Worker--- 9494*7c356e86SAndroid Build Coastguard Workername: arrassign-fnc-global 9495*7c356e86SAndroid Build Coastguard Workerdescription: 9496*7c356e86SAndroid Build Coastguard Worker Check locality of array access inside a function 9497*7c356e86SAndroid Build Coastguard Worker with the bash4/mksh/yash/zsh typeset -g keyword 9498*7c356e86SAndroid Build Coastguard Workerstdin: 9499*7c356e86SAndroid Build Coastguard Worker function fn { 9500*7c356e86SAndroid Build Coastguard Worker typeset -g x 9501*7c356e86SAndroid Build Coastguard Worker x+=(f) 9502*7c356e86SAndroid Build Coastguard Worker echo ".fn:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9503*7c356e86SAndroid Build Coastguard Worker } 9504*7c356e86SAndroid Build Coastguard Worker function rfn { 9505*7c356e86SAndroid Build Coastguard Worker set -A y 9506*7c356e86SAndroid Build Coastguard Worker typeset -g y 9507*7c356e86SAndroid Build Coastguard Worker y+=(f) 9508*7c356e86SAndroid Build Coastguard Worker echo ".rfn:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9509*7c356e86SAndroid Build Coastguard Worker } 9510*7c356e86SAndroid Build Coastguard Worker function fnr { 9511*7c356e86SAndroid Build Coastguard Worker typeset -g z 9512*7c356e86SAndroid Build Coastguard Worker set -A z 9513*7c356e86SAndroid Build Coastguard Worker z+=(f) 9514*7c356e86SAndroid Build Coastguard Worker echo ".fnr:${z[0]}.${z[1]}.${z[2]}.${z[3]}:" 9515*7c356e86SAndroid Build Coastguard Worker } 9516*7c356e86SAndroid Build Coastguard Worker x=(m m) 9517*7c356e86SAndroid Build Coastguard Worker y=(m m) 9518*7c356e86SAndroid Build Coastguard Worker z=(m m) 9519*7c356e86SAndroid Build Coastguard Worker echo ".f0:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9520*7c356e86SAndroid Build Coastguard Worker fn 9521*7c356e86SAndroid Build Coastguard Worker echo ".f1:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9522*7c356e86SAndroid Build Coastguard Worker fn 9523*7c356e86SAndroid Build Coastguard Worker echo ".f2:${x[0]}.${x[1]}.${x[2]}.${x[3]}:" 9524*7c356e86SAndroid Build Coastguard Worker echo ".rf0:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9525*7c356e86SAndroid Build Coastguard Worker rfn 9526*7c356e86SAndroid Build Coastguard Worker echo ".rf1:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9527*7c356e86SAndroid Build Coastguard Worker rfn 9528*7c356e86SAndroid Build Coastguard Worker echo ".rf2:${y[0]}.${y[1]}.${y[2]}.${y[3]}:" 9529*7c356e86SAndroid Build Coastguard Worker echo ".f0r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:" 9530*7c356e86SAndroid Build Coastguard Worker fnr 9531*7c356e86SAndroid Build Coastguard Worker echo ".f1r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:" 9532*7c356e86SAndroid Build Coastguard Worker fnr 9533*7c356e86SAndroid Build Coastguard Worker echo ".f2r:${z[0]}.${z[1]}.${z[2]}.${z[3]}:" 9534*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9535*7c356e86SAndroid Build Coastguard Worker .f0:m.m..: 9536*7c356e86SAndroid Build Coastguard Worker .fn:m.m.f.: 9537*7c356e86SAndroid Build Coastguard Worker .f1:m.m.f.: 9538*7c356e86SAndroid Build Coastguard Worker .fn:m.m.f.f: 9539*7c356e86SAndroid Build Coastguard Worker .f2:m.m.f.f: 9540*7c356e86SAndroid Build Coastguard Worker .rf0:m.m..: 9541*7c356e86SAndroid Build Coastguard Worker .rfn:f...: 9542*7c356e86SAndroid Build Coastguard Worker .rf1:f...: 9543*7c356e86SAndroid Build Coastguard Worker .rfn:f...: 9544*7c356e86SAndroid Build Coastguard Worker .rf2:f...: 9545*7c356e86SAndroid Build Coastguard Worker .f0r:m.m..: 9546*7c356e86SAndroid Build Coastguard Worker .fnr:f...: 9547*7c356e86SAndroid Build Coastguard Worker .f1r:f...: 9548*7c356e86SAndroid Build Coastguard Worker .fnr:f...: 9549*7c356e86SAndroid Build Coastguard Worker .f2r:f...: 9550*7c356e86SAndroid Build Coastguard Worker--- 9551*7c356e86SAndroid Build Coastguard Workername: strassign-fnc-none 9552*7c356e86SAndroid Build Coastguard Workerdescription: 9553*7c356e86SAndroid Build Coastguard Worker Check locality of string access inside a function 9554*7c356e86SAndroid Build Coastguard Workerstdin: 9555*7c356e86SAndroid Build Coastguard Worker function fn { 9556*7c356e86SAndroid Build Coastguard Worker x+=f 9557*7c356e86SAndroid Build Coastguard Worker echo ".fn:$x:" 9558*7c356e86SAndroid Build Coastguard Worker } 9559*7c356e86SAndroid Build Coastguard Worker function rfn { 9560*7c356e86SAndroid Build Coastguard Worker y= 9561*7c356e86SAndroid Build Coastguard Worker y+=f 9562*7c356e86SAndroid Build Coastguard Worker echo ".rfn:$y:" 9563*7c356e86SAndroid Build Coastguard Worker } 9564*7c356e86SAndroid Build Coastguard Worker x=m 9565*7c356e86SAndroid Build Coastguard Worker y=m 9566*7c356e86SAndroid Build Coastguard Worker echo ".f0:$x:" 9567*7c356e86SAndroid Build Coastguard Worker fn 9568*7c356e86SAndroid Build Coastguard Worker echo ".f1:$x:" 9569*7c356e86SAndroid Build Coastguard Worker fn 9570*7c356e86SAndroid Build Coastguard Worker echo ".f2:$x:" 9571*7c356e86SAndroid Build Coastguard Worker echo ".rf0:$y:" 9572*7c356e86SAndroid Build Coastguard Worker rfn 9573*7c356e86SAndroid Build Coastguard Worker echo ".rf1:$y:" 9574*7c356e86SAndroid Build Coastguard Worker rfn 9575*7c356e86SAndroid Build Coastguard Worker echo ".rf2:$y:" 9576*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9577*7c356e86SAndroid Build Coastguard Worker .f0:m: 9578*7c356e86SAndroid Build Coastguard Worker .fn:mf: 9579*7c356e86SAndroid Build Coastguard Worker .f1:mf: 9580*7c356e86SAndroid Build Coastguard Worker .fn:mff: 9581*7c356e86SAndroid Build Coastguard Worker .f2:mff: 9582*7c356e86SAndroid Build Coastguard Worker .rf0:m: 9583*7c356e86SAndroid Build Coastguard Worker .rfn:f: 9584*7c356e86SAndroid Build Coastguard Worker .rf1:f: 9585*7c356e86SAndroid Build Coastguard Worker .rfn:f: 9586*7c356e86SAndroid Build Coastguard Worker .rf2:f: 9587*7c356e86SAndroid Build Coastguard Worker--- 9588*7c356e86SAndroid Build Coastguard Workername: strassign-fnc-local 9589*7c356e86SAndroid Build Coastguard Workerdescription: 9590*7c356e86SAndroid Build Coastguard Worker Check locality of string access inside a function 9591*7c356e86SAndroid Build Coastguard Worker with the bash/mksh/ksh93 local/typeset keyword 9592*7c356e86SAndroid Build Coastguard Worker (note: ksh93 has no local; typeset works only in FKSH) 9593*7c356e86SAndroid Build Coastguard Workerstdin: 9594*7c356e86SAndroid Build Coastguard Worker function fn { 9595*7c356e86SAndroid Build Coastguard Worker typeset x 9596*7c356e86SAndroid Build Coastguard Worker x+=f 9597*7c356e86SAndroid Build Coastguard Worker echo ".fn:$x:" 9598*7c356e86SAndroid Build Coastguard Worker } 9599*7c356e86SAndroid Build Coastguard Worker function rfn { 9600*7c356e86SAndroid Build Coastguard Worker y= 9601*7c356e86SAndroid Build Coastguard Worker typeset y 9602*7c356e86SAndroid Build Coastguard Worker y+=f 9603*7c356e86SAndroid Build Coastguard Worker echo ".rfn:$y:" 9604*7c356e86SAndroid Build Coastguard Worker } 9605*7c356e86SAndroid Build Coastguard Worker function fnr { 9606*7c356e86SAndroid Build Coastguard Worker typeset z 9607*7c356e86SAndroid Build Coastguard Worker z= 9608*7c356e86SAndroid Build Coastguard Worker z+=f 9609*7c356e86SAndroid Build Coastguard Worker echo ".fnr:$z:" 9610*7c356e86SAndroid Build Coastguard Worker } 9611*7c356e86SAndroid Build Coastguard Worker x=m 9612*7c356e86SAndroid Build Coastguard Worker y=m 9613*7c356e86SAndroid Build Coastguard Worker z=m 9614*7c356e86SAndroid Build Coastguard Worker echo ".f0:$x:" 9615*7c356e86SAndroid Build Coastguard Worker fn 9616*7c356e86SAndroid Build Coastguard Worker echo ".f1:$x:" 9617*7c356e86SAndroid Build Coastguard Worker fn 9618*7c356e86SAndroid Build Coastguard Worker echo ".f2:$x:" 9619*7c356e86SAndroid Build Coastguard Worker echo ".rf0:$y:" 9620*7c356e86SAndroid Build Coastguard Worker rfn 9621*7c356e86SAndroid Build Coastguard Worker echo ".rf1:$y:" 9622*7c356e86SAndroid Build Coastguard Worker rfn 9623*7c356e86SAndroid Build Coastguard Worker echo ".rf2:$y:" 9624*7c356e86SAndroid Build Coastguard Worker echo ".f0r:$z:" 9625*7c356e86SAndroid Build Coastguard Worker fnr 9626*7c356e86SAndroid Build Coastguard Worker echo ".f1r:$z:" 9627*7c356e86SAndroid Build Coastguard Worker fnr 9628*7c356e86SAndroid Build Coastguard Worker echo ".f2r:$z:" 9629*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9630*7c356e86SAndroid Build Coastguard Worker .f0:m: 9631*7c356e86SAndroid Build Coastguard Worker .fn:f: 9632*7c356e86SAndroid Build Coastguard Worker .f1:m: 9633*7c356e86SAndroid Build Coastguard Worker .fn:f: 9634*7c356e86SAndroid Build Coastguard Worker .f2:m: 9635*7c356e86SAndroid Build Coastguard Worker .rf0:m: 9636*7c356e86SAndroid Build Coastguard Worker .rfn:f: 9637*7c356e86SAndroid Build Coastguard Worker .rf1:: 9638*7c356e86SAndroid Build Coastguard Worker .rfn:f: 9639*7c356e86SAndroid Build Coastguard Worker .rf2:: 9640*7c356e86SAndroid Build Coastguard Worker .f0r:m: 9641*7c356e86SAndroid Build Coastguard Worker .fnr:f: 9642*7c356e86SAndroid Build Coastguard Worker .f1r:m: 9643*7c356e86SAndroid Build Coastguard Worker .fnr:f: 9644*7c356e86SAndroid Build Coastguard Worker .f2r:m: 9645*7c356e86SAndroid Build Coastguard Worker--- 9646*7c356e86SAndroid Build Coastguard Workername: strassign-fnc-global 9647*7c356e86SAndroid Build Coastguard Workerdescription: 9648*7c356e86SAndroid Build Coastguard Worker Check locality of string access inside a function 9649*7c356e86SAndroid Build Coastguard Worker with the bash4/mksh/yash/zsh typeset -g keyword 9650*7c356e86SAndroid Build Coastguard Workerstdin: 9651*7c356e86SAndroid Build Coastguard Worker function fn { 9652*7c356e86SAndroid Build Coastguard Worker typeset -g x 9653*7c356e86SAndroid Build Coastguard Worker x+=f 9654*7c356e86SAndroid Build Coastguard Worker echo ".fn:$x:" 9655*7c356e86SAndroid Build Coastguard Worker } 9656*7c356e86SAndroid Build Coastguard Worker function rfn { 9657*7c356e86SAndroid Build Coastguard Worker y= 9658*7c356e86SAndroid Build Coastguard Worker typeset -g y 9659*7c356e86SAndroid Build Coastguard Worker y+=f 9660*7c356e86SAndroid Build Coastguard Worker echo ".rfn:$y:" 9661*7c356e86SAndroid Build Coastguard Worker } 9662*7c356e86SAndroid Build Coastguard Worker function fnr { 9663*7c356e86SAndroid Build Coastguard Worker typeset -g z 9664*7c356e86SAndroid Build Coastguard Worker z= 9665*7c356e86SAndroid Build Coastguard Worker z+=f 9666*7c356e86SAndroid Build Coastguard Worker echo ".fnr:$z:" 9667*7c356e86SAndroid Build Coastguard Worker } 9668*7c356e86SAndroid Build Coastguard Worker x=m 9669*7c356e86SAndroid Build Coastguard Worker y=m 9670*7c356e86SAndroid Build Coastguard Worker z=m 9671*7c356e86SAndroid Build Coastguard Worker echo ".f0:$x:" 9672*7c356e86SAndroid Build Coastguard Worker fn 9673*7c356e86SAndroid Build Coastguard Worker echo ".f1:$x:" 9674*7c356e86SAndroid Build Coastguard Worker fn 9675*7c356e86SAndroid Build Coastguard Worker echo ".f2:$x:" 9676*7c356e86SAndroid Build Coastguard Worker echo ".rf0:$y:" 9677*7c356e86SAndroid Build Coastguard Worker rfn 9678*7c356e86SAndroid Build Coastguard Worker echo ".rf1:$y:" 9679*7c356e86SAndroid Build Coastguard Worker rfn 9680*7c356e86SAndroid Build Coastguard Worker echo ".rf2:$y:" 9681*7c356e86SAndroid Build Coastguard Worker echo ".f0r:$z:" 9682*7c356e86SAndroid Build Coastguard Worker fnr 9683*7c356e86SAndroid Build Coastguard Worker echo ".f1r:$z:" 9684*7c356e86SAndroid Build Coastguard Worker fnr 9685*7c356e86SAndroid Build Coastguard Worker echo ".f2r:$z:" 9686*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9687*7c356e86SAndroid Build Coastguard Worker .f0:m: 9688*7c356e86SAndroid Build Coastguard Worker .fn:mf: 9689*7c356e86SAndroid Build Coastguard Worker .f1:mf: 9690*7c356e86SAndroid Build Coastguard Worker .fn:mff: 9691*7c356e86SAndroid Build Coastguard Worker .f2:mff: 9692*7c356e86SAndroid Build Coastguard Worker .rf0:m: 9693*7c356e86SAndroid Build Coastguard Worker .rfn:f: 9694*7c356e86SAndroid Build Coastguard Worker .rf1:f: 9695*7c356e86SAndroid Build Coastguard Worker .rfn:f: 9696*7c356e86SAndroid Build Coastguard Worker .rf2:f: 9697*7c356e86SAndroid Build Coastguard Worker .f0r:m: 9698*7c356e86SAndroid Build Coastguard Worker .fnr:f: 9699*7c356e86SAndroid Build Coastguard Worker .f1r:f: 9700*7c356e86SAndroid Build Coastguard Worker .fnr:f: 9701*7c356e86SAndroid Build Coastguard Worker .f2r:f: 9702*7c356e86SAndroid Build Coastguard Worker--- 9703*7c356e86SAndroid Build Coastguard Workername: unset-fnc-local-ksh 9704*7c356e86SAndroid Build Coastguard Workerdescription: 9705*7c356e86SAndroid Build Coastguard Worker Check that “unset” removes a previous “local” 9706*7c356e86SAndroid Build Coastguard Worker (ksh93 syntax compatible version); apparently, 9707*7c356e86SAndroid Build Coastguard Worker there are shells which fail this? 9708*7c356e86SAndroid Build Coastguard Workerstdin: 9709*7c356e86SAndroid Build Coastguard Worker function f { 9710*7c356e86SAndroid Build Coastguard Worker echo f0: $x 9711*7c356e86SAndroid Build Coastguard Worker typeset x 9712*7c356e86SAndroid Build Coastguard Worker echo f1: $x 9713*7c356e86SAndroid Build Coastguard Worker x=fa 9714*7c356e86SAndroid Build Coastguard Worker echo f2: $x 9715*7c356e86SAndroid Build Coastguard Worker unset x 9716*7c356e86SAndroid Build Coastguard Worker echo f3: $x 9717*7c356e86SAndroid Build Coastguard Worker x=fb 9718*7c356e86SAndroid Build Coastguard Worker echo f4: $x 9719*7c356e86SAndroid Build Coastguard Worker } 9720*7c356e86SAndroid Build Coastguard Worker x=o 9721*7c356e86SAndroid Build Coastguard Worker echo before: $x 9722*7c356e86SAndroid Build Coastguard Worker f 9723*7c356e86SAndroid Build Coastguard Worker echo after: $x 9724*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9725*7c356e86SAndroid Build Coastguard Worker before: o 9726*7c356e86SAndroid Build Coastguard Worker f0: o 9727*7c356e86SAndroid Build Coastguard Worker f1: 9728*7c356e86SAndroid Build Coastguard Worker f2: fa 9729*7c356e86SAndroid Build Coastguard Worker f3: o 9730*7c356e86SAndroid Build Coastguard Worker f4: fb 9731*7c356e86SAndroid Build Coastguard Worker after: fb 9732*7c356e86SAndroid Build Coastguard Worker--- 9733*7c356e86SAndroid Build Coastguard Workername: unset-fnc-local-sh 9734*7c356e86SAndroid Build Coastguard Workerdescription: 9735*7c356e86SAndroid Build Coastguard Worker Check that “unset” removes a previous “local” 9736*7c356e86SAndroid Build Coastguard Worker (Debian Policy §10.4 sh version); apparently, 9737*7c356e86SAndroid Build Coastguard Worker there are shells which fail this? 9738*7c356e86SAndroid Build Coastguard Workerstdin: 9739*7c356e86SAndroid Build Coastguard Worker f() { 9740*7c356e86SAndroid Build Coastguard Worker echo f0: $x 9741*7c356e86SAndroid Build Coastguard Worker local x 9742*7c356e86SAndroid Build Coastguard Worker echo f1: $x 9743*7c356e86SAndroid Build Coastguard Worker x=fa 9744*7c356e86SAndroid Build Coastguard Worker echo f2: $x 9745*7c356e86SAndroid Build Coastguard Worker unset x 9746*7c356e86SAndroid Build Coastguard Worker echo f3: $x 9747*7c356e86SAndroid Build Coastguard Worker x=fb 9748*7c356e86SAndroid Build Coastguard Worker echo f4: $x 9749*7c356e86SAndroid Build Coastguard Worker } 9750*7c356e86SAndroid Build Coastguard Worker x=o 9751*7c356e86SAndroid Build Coastguard Worker echo before: $x 9752*7c356e86SAndroid Build Coastguard Worker f 9753*7c356e86SAndroid Build Coastguard Worker echo after: $x 9754*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9755*7c356e86SAndroid Build Coastguard Worker before: o 9756*7c356e86SAndroid Build Coastguard Worker f0: o 9757*7c356e86SAndroid Build Coastguard Worker f1: 9758*7c356e86SAndroid Build Coastguard Worker f2: fa 9759*7c356e86SAndroid Build Coastguard Worker f3: o 9760*7c356e86SAndroid Build Coastguard Worker f4: fb 9761*7c356e86SAndroid Build Coastguard Worker after: fb 9762*7c356e86SAndroid Build Coastguard Worker--- 9763*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-1 9764*7c356e86SAndroid Build Coastguard Workerdescription: 9765*7c356e86SAndroid Build Coastguard Worker Check if bash-style substring expansion works 9766*7c356e86SAndroid Build Coastguard Worker when using positive numerics 9767*7c356e86SAndroid Build Coastguard Workerstdin: 9768*7c356e86SAndroid Build Coastguard Worker x=abcdefghi 9769*7c356e86SAndroid Build Coastguard Worker typeset -i y=123456789 9770*7c356e86SAndroid Build Coastguard Worker typeset -i 16 z=123456789 # 16#75bcd15 9771*7c356e86SAndroid Build Coastguard Worker echo a t${x:2:2} ${y:2:3} ${z:2:3} a 9772*7c356e86SAndroid Build Coastguard Worker echo b ${x::3} ${y::3} ${z::3} b 9773*7c356e86SAndroid Build Coastguard Worker echo c ${x:2:} ${y:2:} ${z:2:} c 9774*7c356e86SAndroid Build Coastguard Worker echo d ${x:2} ${y:2} ${z:2} d 9775*7c356e86SAndroid Build Coastguard Worker echo e ${x:2:6} ${y:2:6} ${z:2:7} e 9776*7c356e86SAndroid Build Coastguard Worker echo f ${x:2:7} ${y:2:7} ${z:2:8} f 9777*7c356e86SAndroid Build Coastguard Worker echo g ${x:2:8} ${y:2:8} ${z:2:9} g 9778*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9779*7c356e86SAndroid Build Coastguard Worker a tcd 345 #75 a 9780*7c356e86SAndroid Build Coastguard Worker b abc 123 16# b 9781*7c356e86SAndroid Build Coastguard Worker c c 9782*7c356e86SAndroid Build Coastguard Worker d cdefghi 3456789 #75bcd15 d 9783*7c356e86SAndroid Build Coastguard Worker e cdefgh 345678 #75bcd1 e 9784*7c356e86SAndroid Build Coastguard Worker f cdefghi 3456789 #75bcd15 f 9785*7c356e86SAndroid Build Coastguard Worker g cdefghi 3456789 #75bcd15 g 9786*7c356e86SAndroid Build Coastguard Worker--- 9787*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-2 9788*7c356e86SAndroid Build Coastguard Workerdescription: 9789*7c356e86SAndroid Build Coastguard Worker Check if bash-style substring expansion works 9790*7c356e86SAndroid Build Coastguard Worker when using negative numerics or expressions 9791*7c356e86SAndroid Build Coastguard Workerstdin: 9792*7c356e86SAndroid Build Coastguard Worker x=abcdefghi 9793*7c356e86SAndroid Build Coastguard Worker typeset -i y=123456789 9794*7c356e86SAndroid Build Coastguard Worker typeset -i 16 z=123456789 # 16#75bcd15 9795*7c356e86SAndroid Build Coastguard Worker n=2 9796*7c356e86SAndroid Build Coastguard Worker echo a ${x:$n:3} ${y:$n:3} ${z:$n:3} a 9797*7c356e86SAndroid Build Coastguard Worker echo b ${x:(n):3} ${y:(n):3} ${z:(n):3} b 9798*7c356e86SAndroid Build Coastguard Worker echo c ${x:(-2):1} ${y:(-2):1} ${z:(-2):1} c 9799*7c356e86SAndroid Build Coastguard Worker echo d t${x: n:2} ${y: n:3} ${z: n:3} d 9800*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9801*7c356e86SAndroid Build Coastguard Worker a cde 345 #75 a 9802*7c356e86SAndroid Build Coastguard Worker b cde 345 #75 b 9803*7c356e86SAndroid Build Coastguard Worker c h 8 1 c 9804*7c356e86SAndroid Build Coastguard Worker d tcd 345 #75 d 9805*7c356e86SAndroid Build Coastguard Worker--- 9806*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-3 9807*7c356e86SAndroid Build Coastguard Workerdescription: 9808*7c356e86SAndroid Build Coastguard Worker Match bash5 9809*7c356e86SAndroid Build Coastguard Workerstdin: 9810*7c356e86SAndroid Build Coastguard Worker export x=abcdefghi n=2 9811*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'echo v${x:(n)}x' 9812*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'echo w${x: n}x' 9813*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'echo x${x:n}x' 9814*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'echo y${x:}x' 9815*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'echo z${x}x' 9816*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'x=abcdef;y=123;echo q${x:${y:2:1}:2}q' 9817*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9818*7c356e86SAndroid Build Coastguard Worker vcdefghix 9819*7c356e86SAndroid Build Coastguard Worker wcdefghix 9820*7c356e86SAndroid Build Coastguard Worker xcdefghix 9821*7c356e86SAndroid Build Coastguard Worker zabcdefghix 9822*7c356e86SAndroid Build Coastguard Worker qdeq 9823*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 9824*7c356e86SAndroid Build Coastguard Worker /x:}.*bad substitution/ 9825*7c356e86SAndroid Build Coastguard Worker--- 9826*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-4 9827*7c356e86SAndroid Build Coastguard Workerdescription: 9828*7c356e86SAndroid Build Coastguard Worker Check corner cases for substring expansion 9829*7c356e86SAndroid Build Coastguard Workerstdin: 9830*7c356e86SAndroid Build Coastguard Worker x=abcdefghi 9831*7c356e86SAndroid Build Coastguard Worker integer y=2 9832*7c356e86SAndroid Build Coastguard Worker echo a ${x:(y == 1 ? 2 : 3):4} a 9833*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9834*7c356e86SAndroid Build Coastguard Worker a defg a 9835*7c356e86SAndroid Build Coastguard Worker--- 9836*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-5A 9837*7c356e86SAndroid Build Coastguard Workerdescription: 9838*7c356e86SAndroid Build Coastguard Worker Check that substring expansions work on characters 9839*7c356e86SAndroid Build Coastguard Workerstdin: 9840*7c356e86SAndroid Build Coastguard Worker set +U 9841*7c356e86SAndroid Build Coastguard Worker x=mäh 9842*7c356e86SAndroid Build Coastguard Worker echo a ${x::1} ${x: -1} a 9843*7c356e86SAndroid Build Coastguard Worker echo b ${x::3} ${x: -3} b 9844*7c356e86SAndroid Build Coastguard Worker echo c ${x:1:2} ${x: -3:2} c 9845*7c356e86SAndroid Build Coastguard Worker echo d ${#x} d 9846*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9847*7c356e86SAndroid Build Coastguard Worker a m h a 9848*7c356e86SAndroid Build Coastguard Worker b mä äh b 9849*7c356e86SAndroid Build Coastguard Worker c ä ä c 9850*7c356e86SAndroid Build Coastguard Worker d 4 d 9851*7c356e86SAndroid Build Coastguard Worker--- 9852*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-5W 9853*7c356e86SAndroid Build Coastguard Workerdescription: 9854*7c356e86SAndroid Build Coastguard Worker Check that substring expansions work on characters 9855*7c356e86SAndroid Build Coastguard Workerstdin: 9856*7c356e86SAndroid Build Coastguard Worker set -U 9857*7c356e86SAndroid Build Coastguard Worker x=mäh 9858*7c356e86SAndroid Build Coastguard Worker echo a ${x::1} ${x: -1} a 9859*7c356e86SAndroid Build Coastguard Worker echo b ${x::2} ${x: -2} b 9860*7c356e86SAndroid Build Coastguard Worker echo c ${x:1:1} ${x: -2:1} c 9861*7c356e86SAndroid Build Coastguard Worker echo d ${#x} d 9862*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9863*7c356e86SAndroid Build Coastguard Worker a m h a 9864*7c356e86SAndroid Build Coastguard Worker b mä äh b 9865*7c356e86SAndroid Build Coastguard Worker c ä ä c 9866*7c356e86SAndroid Build Coastguard Worker d 3 d 9867*7c356e86SAndroid Build Coastguard Worker--- 9868*7c356e86SAndroid Build Coastguard Workername: varexpand-substr-6 9869*7c356e86SAndroid Build Coastguard Workerdescription: 9870*7c356e86SAndroid Build Coastguard Worker Check that string substitution works correctly 9871*7c356e86SAndroid Build Coastguard Workerstdin: 9872*7c356e86SAndroid Build Coastguard Worker foo=1 9873*7c356e86SAndroid Build Coastguard Worker bar=2 9874*7c356e86SAndroid Build Coastguard Worker baz=qwertyuiop 9875*7c356e86SAndroid Build Coastguard Worker echo a ${baz: foo: bar} 9876*7c356e86SAndroid Build Coastguard Worker echo b ${baz: foo: $bar} 9877*7c356e86SAndroid Build Coastguard Worker echo c ${baz: $foo: bar} 9878*7c356e86SAndroid Build Coastguard Worker echo d ${baz: $foo: $bar} 9879*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9880*7c356e86SAndroid Build Coastguard Worker a we 9881*7c356e86SAndroid Build Coastguard Worker b we 9882*7c356e86SAndroid Build Coastguard Worker c we 9883*7c356e86SAndroid Build Coastguard Worker d we 9884*7c356e86SAndroid Build Coastguard Worker--- 9885*7c356e86SAndroid Build Coastguard Workername: varexpand-special-hash 9886*7c356e86SAndroid Build Coastguard Workerdescription: 9887*7c356e86SAndroid Build Coastguard Worker Check special ${var@x} expansion for x=hash 9888*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes 9889*7c356e86SAndroid Build Coastguard Workerstdin: 9890*7c356e86SAndroid Build Coastguard Worker typeset -i8 foo=10 9891*7c356e86SAndroid Build Coastguard Worker bar=baz 9892*7c356e86SAndroid Build Coastguard Worker unset baz 9893*7c356e86SAndroid Build Coastguard Worker print ${foo@#} ${bar@#} ${baz@#} . 9894*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9895*7c356e86SAndroid Build Coastguard Worker 9B15FBFB CFBDD32B 00000000 . 9896*7c356e86SAndroid Build Coastguard Worker--- 9897*7c356e86SAndroid Build Coastguard Workername: varexpand-special-hash-ebcdic 9898*7c356e86SAndroid Build Coastguard Workerdescription: 9899*7c356e86SAndroid Build Coastguard Worker Check special ${var@x} expansion for x=hash 9900*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no 9901*7c356e86SAndroid Build Coastguard Workerstdin: 9902*7c356e86SAndroid Build Coastguard Worker typeset -i8 foo=10 9903*7c356e86SAndroid Build Coastguard Worker bar=baz 9904*7c356e86SAndroid Build Coastguard Worker unset baz 9905*7c356e86SAndroid Build Coastguard Worker print ${foo@#} ${bar@#} ${baz@#} . 9906*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9907*7c356e86SAndroid Build Coastguard Worker 016AE33D 9769C4AF 00000000 . 9908*7c356e86SAndroid Build Coastguard Worker--- 9909*7c356e86SAndroid Build Coastguard Workername: varexpand-special-quote 9910*7c356e86SAndroid Build Coastguard Workerdescription: 9911*7c356e86SAndroid Build Coastguard Worker Check special ${var@Q} expansion for quoted strings 9912*7c356e86SAndroid Build Coastguard Workercategory: !shell:faux-ebcdic 9913*7c356e86SAndroid Build Coastguard Workerstdin: 9914*7c356e86SAndroid Build Coastguard Worker set +U 9915*7c356e86SAndroid Build Coastguard Worker i=x 9916*7c356e86SAndroid Build Coastguard Worker j=a\ b 9917*7c356e86SAndroid Build Coastguard Worker k=$'c 9918*7c356e86SAndroid Build Coastguard Worker d\xA0''e€f' 9919*7c356e86SAndroid Build Coastguard Worker print -r -- "<i=$i j=$j k=$k>" 9920*7c356e86SAndroid Build Coastguard Worker s="u=${i@Q} v=${j@Q} w=${k@Q}" 9921*7c356e86SAndroid Build Coastguard Worker print -r -- "s=\"$s\"" 9922*7c356e86SAndroid Build Coastguard Worker eval "$s" 9923*7c356e86SAndroid Build Coastguard Worker typeset -p u v w 9924*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9925*7c356e86SAndroid Build Coastguard Worker <i=x j=a b k=c 9926*7c356e86SAndroid Build Coastguard Worker d�e€f> 9927*7c356e86SAndroid Build Coastguard Worker s="u=x v='a b' w=$'c\nd\240e\u20ACf'" 9928*7c356e86SAndroid Build Coastguard Worker typeset u=x 9929*7c356e86SAndroid Build Coastguard Worker typeset v='a b' 9930*7c356e86SAndroid Build Coastguard Worker typeset w=$'c\nd\240e\u20ACf' 9931*7c356e86SAndroid Build Coastguard Worker--- 9932*7c356e86SAndroid Build Coastguard Workername: varexpand-special-quote-faux-EBCDIC 9933*7c356e86SAndroid Build Coastguard Workerdescription: 9934*7c356e86SAndroid Build Coastguard Worker Check special ${var@Q} expansion for quoted strings 9935*7c356e86SAndroid Build Coastguard Workercategory: shell:faux-ebcdic 9936*7c356e86SAndroid Build Coastguard Workerstdin: 9937*7c356e86SAndroid Build Coastguard Worker set +U 9938*7c356e86SAndroid Build Coastguard Worker i=x 9939*7c356e86SAndroid Build Coastguard Worker j=a\ b 9940*7c356e86SAndroid Build Coastguard Worker k=$'c 9941*7c356e86SAndroid Build Coastguard Worker d\xA0''e€f' 9942*7c356e86SAndroid Build Coastguard Worker print -r -- "<i=$i j=$j k=$k>" 9943*7c356e86SAndroid Build Coastguard Worker s="u=${i@Q} v=${j@Q} w=${k@Q}" 9944*7c356e86SAndroid Build Coastguard Worker print -r -- "s=\"$s\"" 9945*7c356e86SAndroid Build Coastguard Worker eval "$s" 9946*7c356e86SAndroid Build Coastguard Worker typeset -p u v w 9947*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9948*7c356e86SAndroid Build Coastguard Worker <i=x j=a b k=c 9949*7c356e86SAndroid Build Coastguard Worker d�e€f> 9950*7c356e86SAndroid Build Coastguard Worker s="u=x v='a b' w=$'c\nd�e\u20ACf'" 9951*7c356e86SAndroid Build Coastguard Worker typeset u=x 9952*7c356e86SAndroid Build Coastguard Worker typeset v='a b' 9953*7c356e86SAndroid Build Coastguard Worker typeset w=$'c\nd�e\u20ACf' 9954*7c356e86SAndroid Build Coastguard Worker--- 9955*7c356e86SAndroid Build Coastguard Workername: varexpand-null-1 9956*7c356e86SAndroid Build Coastguard Workerdescription: 9957*7c356e86SAndroid Build Coastguard Worker Ensure empty strings expand emptily 9958*7c356e86SAndroid Build Coastguard Workerstdin: 9959*7c356e86SAndroid Build Coastguard Worker print s ${a} . ${b} S 9960*7c356e86SAndroid Build Coastguard Worker print t ${a#?} . ${b%?} T 9961*7c356e86SAndroid Build Coastguard Worker print r ${a=} . ${b/c/d} R 9962*7c356e86SAndroid Build Coastguard Worker print q 9963*7c356e86SAndroid Build Coastguard Worker print s "${a}" . "${b}" S 9964*7c356e86SAndroid Build Coastguard Worker print t "${a#?}" . "${b%?}" T 9965*7c356e86SAndroid Build Coastguard Worker print r "${a=}" . "${b/c/d}" R 9966*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9967*7c356e86SAndroid Build Coastguard Worker s . S 9968*7c356e86SAndroid Build Coastguard Worker t . T 9969*7c356e86SAndroid Build Coastguard Worker r . R 9970*7c356e86SAndroid Build Coastguard Worker q 9971*7c356e86SAndroid Build Coastguard Worker s . S 9972*7c356e86SAndroid Build Coastguard Worker t . T 9973*7c356e86SAndroid Build Coastguard Worker r . R 9974*7c356e86SAndroid Build Coastguard Worker--- 9975*7c356e86SAndroid Build Coastguard Workername: varexpand-null-2 9976*7c356e86SAndroid Build Coastguard Workerdescription: 9977*7c356e86SAndroid Build Coastguard Worker Ensure empty strings, when quoted, are expanded as empty strings 9978*7c356e86SAndroid Build Coastguard Workerstdin: 9979*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nfor x in "$@"; do print -nr -- "<$x> "; done' >pfs 9980*7c356e86SAndroid Build Coastguard Worker chmod +x pfs 9981*7c356e86SAndroid Build Coastguard Worker ./pfs 1 "${a}" 2 "${a#?}" + "${b%?}" 3 "${a=}" + "${b/c/d}" 9982*7c356e86SAndroid Build Coastguard Worker echo . 9983*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 9984*7c356e86SAndroid Build Coastguard Worker <1> <> <2> <> <+> <> <3> <> <+> <> . 9985*7c356e86SAndroid Build Coastguard Worker--- 9986*7c356e86SAndroid Build Coastguard Workername: varexpand-null-3 9987*7c356e86SAndroid Build Coastguard Workerdescription: 9988*7c356e86SAndroid Build Coastguard Worker Ensure concatenating behaviour matches other shells 9989*7c356e86SAndroid Build Coastguard Workerstdin: 9990*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 9991*7c356e86SAndroid Build Coastguard Worker showargs 0 ""$@ 9992*7c356e86SAndroid Build Coastguard Worker x=; showargs 1 "$x"$@ 9993*7c356e86SAndroid Build Coastguard Worker set A; showargs 2 "${@:+}" 9994*7c356e86SAndroid Build Coastguard Worker n() { echo "$#"; } 9995*7c356e86SAndroid Build Coastguard Worker unset e 9996*7c356e86SAndroid Build Coastguard Worker set -- a b 9997*7c356e86SAndroid Build Coastguard Worker n """$@" 9998*7c356e86SAndroid Build Coastguard Worker n "$@" 9999*7c356e86SAndroid Build Coastguard Worker n "$@""" 10000*7c356e86SAndroid Build Coastguard Worker n "$e""$@" 10001*7c356e86SAndroid Build Coastguard Worker n "$@" 10002*7c356e86SAndroid Build Coastguard Worker n "$@""$e" 10003*7c356e86SAndroid Build Coastguard Worker set -- 10004*7c356e86SAndroid Build Coastguard Worker n """$@" 10005*7c356e86SAndroid Build Coastguard Worker n "$@" 10006*7c356e86SAndroid Build Coastguard Worker n "$@""" 10007*7c356e86SAndroid Build Coastguard Worker n "$e""$@" 10008*7c356e86SAndroid Build Coastguard Worker n "$@" 10009*7c356e86SAndroid Build Coastguard Worker n "$@""$e" 10010*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10011*7c356e86SAndroid Build Coastguard Worker <0> <> . 10012*7c356e86SAndroid Build Coastguard Worker <1> <> . 10013*7c356e86SAndroid Build Coastguard Worker <2> <> . 10014*7c356e86SAndroid Build Coastguard Worker 2 10015*7c356e86SAndroid Build Coastguard Worker 2 10016*7c356e86SAndroid Build Coastguard Worker 2 10017*7c356e86SAndroid Build Coastguard Worker 2 10018*7c356e86SAndroid Build Coastguard Worker 2 10019*7c356e86SAndroid Build Coastguard Worker 2 10020*7c356e86SAndroid Build Coastguard Worker 1 10021*7c356e86SAndroid Build Coastguard Worker 0 10022*7c356e86SAndroid Build Coastguard Worker 1 10023*7c356e86SAndroid Build Coastguard Worker 1 10024*7c356e86SAndroid Build Coastguard Worker 0 10025*7c356e86SAndroid Build Coastguard Worker 1 10026*7c356e86SAndroid Build Coastguard Worker--- 10027*7c356e86SAndroid Build Coastguard Workername: varexpand-funny-chars 10028*7c356e86SAndroid Build Coastguard Workerdescription: 10029*7c356e86SAndroid Build Coastguard Worker Check some characters 10030*7c356e86SAndroid Build Coastguard Worker XXX \uEF80 is asymmetric, possibly buggy so we don’t check this 10031*7c356e86SAndroid Build Coastguard Workerstdin: 10032*7c356e86SAndroid Build Coastguard Worker x=$'<\x00>'; typeset -p x 10033*7c356e86SAndroid Build Coastguard Worker x=$'<\x01>'; typeset -p x 10034*7c356e86SAndroid Build Coastguard Worker x=$'<\u0000>'; typeset -p x 10035*7c356e86SAndroid Build Coastguard Worker x=$'<\u0001>'; typeset -p x 10036*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10037*7c356e86SAndroid Build Coastguard Worker typeset x='<' 10038*7c356e86SAndroid Build Coastguard Worker typeset x=$'<\001>' 10039*7c356e86SAndroid Build Coastguard Worker typeset x='<' 10040*7c356e86SAndroid Build Coastguard Worker typeset x=$'<\001>' 10041*7c356e86SAndroid Build Coastguard Worker--- 10042*7c356e86SAndroid Build Coastguard Workername: print-funny-chars 10043*7c356e86SAndroid Build Coastguard Workerdescription: 10044*7c356e86SAndroid Build Coastguard Worker Check print builtin's capability to output designated characters 10045*7c356e86SAndroid Build Coastguard Workerstdin: 10046*7c356e86SAndroid Build Coastguard Worker { 10047*7c356e86SAndroid Build Coastguard Worker print '<\0144\0344\xDB\u00DB\u20AC\uDB\x40>' 10048*7c356e86SAndroid Build Coastguard Worker print '<\x00>' 10049*7c356e86SAndroid Build Coastguard Worker print '<\x01>' 10050*7c356e86SAndroid Build Coastguard Worker print '<\u0000>' 10051*7c356e86SAndroid Build Coastguard Worker print '<\u0001>' 10052*7c356e86SAndroid Build Coastguard Worker } | { 10053*7c356e86SAndroid Build Coastguard Worker # integer-base-one-3Ar 10054*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z11 pos=0 10055*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z5 hv=2147483647 10056*7c356e86SAndroid Build Coastguard Worker dasc= 10057*7c356e86SAndroid Build Coastguard Worker if read -arN -1 line; then 10058*7c356e86SAndroid Build Coastguard Worker typeset -i1 line 10059*7c356e86SAndroid Build Coastguard Worker i=0 10060*7c356e86SAndroid Build Coastguard Worker while (( i < ${#line[*]} )); do 10061*7c356e86SAndroid Build Coastguard Worker hv=${line[i++]} 10062*7c356e86SAndroid Build Coastguard Worker if (( (pos & 15) == 0 )); then 10063*7c356e86SAndroid Build Coastguard Worker (( pos )) && print -r -- "$dasc|" 10064*7c356e86SAndroid Build Coastguard Worker print -n "${pos#16#} " 10065*7c356e86SAndroid Build Coastguard Worker dasc=' |' 10066*7c356e86SAndroid Build Coastguard Worker fi 10067*7c356e86SAndroid Build Coastguard Worker print -n "${hv#16#} " 10068*7c356e86SAndroid Build Coastguard Worker if (( (hv < 32) || (hv > 126) )); then 10069*7c356e86SAndroid Build Coastguard Worker dasc=$dasc. 10070*7c356e86SAndroid Build Coastguard Worker else 10071*7c356e86SAndroid Build Coastguard Worker dasc=$dasc${line[i-1]#1#} 10072*7c356e86SAndroid Build Coastguard Worker fi 10073*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10074*7c356e86SAndroid Build Coastguard Worker done 10075*7c356e86SAndroid Build Coastguard Worker fi 10076*7c356e86SAndroid Build Coastguard Worker while (( pos & 15 )); do 10077*7c356e86SAndroid Build Coastguard Worker print -n ' ' 10078*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10079*7c356e86SAndroid Build Coastguard Worker done 10080*7c356e86SAndroid Build Coastguard Worker (( hv == 2147483647 )) || print -r -- "$dasc|" 10081*7c356e86SAndroid Build Coastguard Worker } 10082*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10083*7c356e86SAndroid Build Coastguard Worker 00000000 3C 64 E4 DB C3 9B E2 82 - AC C3 9B 40 3E 0A 3C 00 |<d.........@>.<.| 10084*7c356e86SAndroid Build Coastguard Worker 00000010 3E 0A 3C 01 3E 0A 3C 00 - 3E 0A 3C 01 3E 0A |>.<.>.<.>.<.>.| 10085*7c356e86SAndroid Build Coastguard Worker--- 10086*7c356e86SAndroid Build Coastguard Workername: print-bksl-c 10087*7c356e86SAndroid Build Coastguard Workerdescription: 10088*7c356e86SAndroid Build Coastguard Worker Check print builtin's \c escape 10089*7c356e86SAndroid Build Coastguard Workerstdin: 10090*7c356e86SAndroid Build Coastguard Worker print '\ca'; print b 10091*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10092*7c356e86SAndroid Build Coastguard Worker ab 10093*7c356e86SAndroid Build Coastguard Worker--- 10094*7c356e86SAndroid Build Coastguard Workername: print-cr 10095*7c356e86SAndroid Build Coastguard Workerdescription: 10096*7c356e86SAndroid Build Coastguard Worker Check that CR+LF is not collapsed into LF as some MSYS shells wrongly do 10097*7c356e86SAndroid Build Coastguard Workerstdin: 10098*7c356e86SAndroid Build Coastguard Worker echo '#!'"$__progname" >foo 10099*7c356e86SAndroid Build Coastguard Worker cat >>foo <<-'EOF' 10100*7c356e86SAndroid Build Coastguard Worker print -n -- '220-blau.mirbsd.org ESMTP ready at Thu, 25 Jul 2013 15:57:57 GMT\r\n220->> Bitte keine Werbung einwerfen! <<\r\r\n220 Who do you wanna pretend to be today' 10101*7c356e86SAndroid Build Coastguard Worker print \? 10102*7c356e86SAndroid Build Coastguard Worker EOF 10103*7c356e86SAndroid Build Coastguard Worker chmod +x foo 10104*7c356e86SAndroid Build Coastguard Worker echo "[$(./foo)]" 10105*7c356e86SAndroid Build Coastguard Worker ./foo | while IFS= read -r line; do 10106*7c356e86SAndroid Build Coastguard Worker print -r -- "{$line}" 10107*7c356e86SAndroid Build Coastguard Worker done 10108*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10109*7c356e86SAndroid Build Coastguard Worker [220-blau.mirbsd.org ESMTP ready at Thu, 25 Jul 2013 15:57:57 GMT 10110*7c356e86SAndroid Build Coastguard Worker 220->> Bitte keine Werbung einwerfen! << 10111*7c356e86SAndroid Build Coastguard Worker 10112*7c356e86SAndroid Build Coastguard Worker 220 Who do you wanna pretend to be today? 10113*7c356e86SAndroid Build Coastguard Worker] 10114*7c356e86SAndroid Build Coastguard Worker {220-blau.mirbsd.org ESMTP ready at Thu, 25 Jul 2013 15:57:57 GMT 10115*7c356e86SAndroid Build Coastguard Worker} 10116*7c356e86SAndroid Build Coastguard Worker {220->> Bitte keine Werbung einwerfen! << 10117*7c356e86SAndroid Build Coastguard Worker 10118*7c356e86SAndroid Build Coastguard Worker} 10119*7c356e86SAndroid Build Coastguard Worker {220 Who do you wanna pretend to be today? 10120*7c356e86SAndroid Build Coastguard Worker} 10121*7c356e86SAndroid Build Coastguard Worker--- 10122*7c356e86SAndroid Build Coastguard Workername: print-crlf 10123*7c356e86SAndroid Build Coastguard Workerdescription: 10124*7c356e86SAndroid Build Coastguard Worker Check that CR+LF is shown and read as-is 10125*7c356e86SAndroid Build Coastguard Workercategory: shell:textmode-no 10126*7c356e86SAndroid Build Coastguard Workerstdin: 10127*7c356e86SAndroid Build Coastguard Worker cat >foo <<-'EOF' 10128*7c356e86SAndroid Build Coastguard Worker x='bar 10129*7c356e86SAndroid Build Coastguard Worker ' # 10130*7c356e86SAndroid Build Coastguard Worker echo .${#x} # 10131*7c356e86SAndroid Build Coastguard Worker if test x"$KSH_VERSION" = x""; then # 10132*7c356e86SAndroid Build Coastguard Worker printf '<%s>' "$x" # 10133*7c356e86SAndroid Build Coastguard Worker else # 10134*7c356e86SAndroid Build Coastguard Worker print -nr -- "<$x>" # 10135*7c356e86SAndroid Build Coastguard Worker fi # 10136*7c356e86SAndroid Build Coastguard Worker EOF 10137*7c356e86SAndroid Build Coastguard Worker echo "[$("$__progname" foo)]" 10138*7c356e86SAndroid Build Coastguard Worker "$__progname" foo | while IFS= read -r line; do 10139*7c356e86SAndroid Build Coastguard Worker print -r -- "{$line}" 10140*7c356e86SAndroid Build Coastguard Worker done 10141*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10142*7c356e86SAndroid Build Coastguard Worker [.5 10143*7c356e86SAndroid Build Coastguard Worker <bar 10144*7c356e86SAndroid Build Coastguard Worker >] 10145*7c356e86SAndroid Build Coastguard Worker {.5} 10146*7c356e86SAndroid Build Coastguard Worker {<bar 10147*7c356e86SAndroid Build Coastguard Worker} 10148*7c356e86SAndroid Build Coastguard Worker--- 10149*7c356e86SAndroid Build Coastguard Workername: print-crlf-textmode 10150*7c356e86SAndroid Build Coastguard Workerdescription: 10151*7c356e86SAndroid Build Coastguard Worker Check that CR+LF is treated as newline 10152*7c356e86SAndroid Build Coastguard Workercategory: shell:textmode-yes 10153*7c356e86SAndroid Build Coastguard Workerstdin: 10154*7c356e86SAndroid Build Coastguard Worker cat >foo <<-'EOF' 10155*7c356e86SAndroid Build Coastguard Worker x='bar 10156*7c356e86SAndroid Build Coastguard Worker ' # 10157*7c356e86SAndroid Build Coastguard Worker echo .${#x} # 10158*7c356e86SAndroid Build Coastguard Worker if test x"$KSH_VERSION" = x""; then # 10159*7c356e86SAndroid Build Coastguard Worker printf '<%s>' "$x" # 10160*7c356e86SAndroid Build Coastguard Worker else # 10161*7c356e86SAndroid Build Coastguard Worker print -nr -- "<$x>" # 10162*7c356e86SAndroid Build Coastguard Worker fi # 10163*7c356e86SAndroid Build Coastguard Worker EOF 10164*7c356e86SAndroid Build Coastguard Worker echo "[$("$__progname" foo)]" 10165*7c356e86SAndroid Build Coastguard Worker "$__progname" foo | while IFS= read -r line; do 10166*7c356e86SAndroid Build Coastguard Worker print -r -- "{$line}" 10167*7c356e86SAndroid Build Coastguard Worker done 10168*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10169*7c356e86SAndroid Build Coastguard Worker [.4 10170*7c356e86SAndroid Build Coastguard Worker <bar 10171*7c356e86SAndroid Build Coastguard Worker >] 10172*7c356e86SAndroid Build Coastguard Worker {.4} 10173*7c356e86SAndroid Build Coastguard Worker {<bar} 10174*7c356e86SAndroid Build Coastguard Worker--- 10175*7c356e86SAndroid Build Coastguard Workername: print-lf 10176*7c356e86SAndroid Build Coastguard Workerdescription: 10177*7c356e86SAndroid Build Coastguard Worker Check that LF-only is shown and read as-is 10178*7c356e86SAndroid Build Coastguard Workerstdin: 10179*7c356e86SAndroid Build Coastguard Worker cat >foo <<-'EOF' 10180*7c356e86SAndroid Build Coastguard Worker x='bar 10181*7c356e86SAndroid Build Coastguard Worker ' # 10182*7c356e86SAndroid Build Coastguard Worker echo .${#x} # 10183*7c356e86SAndroid Build Coastguard Worker if test x"$KSH_VERSION" = x""; then # 10184*7c356e86SAndroid Build Coastguard Worker printf '<%s>' "$x" # 10185*7c356e86SAndroid Build Coastguard Worker else # 10186*7c356e86SAndroid Build Coastguard Worker print -nr -- "<$x>" # 10187*7c356e86SAndroid Build Coastguard Worker fi # 10188*7c356e86SAndroid Build Coastguard Worker EOF 10189*7c356e86SAndroid Build Coastguard Worker echo "[$("$__progname" foo)]" 10190*7c356e86SAndroid Build Coastguard Worker "$__progname" foo | while IFS= read -r line; do 10191*7c356e86SAndroid Build Coastguard Worker print -r -- "{$line}" 10192*7c356e86SAndroid Build Coastguard Worker done 10193*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10194*7c356e86SAndroid Build Coastguard Worker [.4 10195*7c356e86SAndroid Build Coastguard Worker <bar 10196*7c356e86SAndroid Build Coastguard Worker >] 10197*7c356e86SAndroid Build Coastguard Worker {.4} 10198*7c356e86SAndroid Build Coastguard Worker {<bar} 10199*7c356e86SAndroid Build Coastguard Worker--- 10200*7c356e86SAndroid Build Coastguard Workername: print-nul-chars 10201*7c356e86SAndroid Build Coastguard Workerdescription: 10202*7c356e86SAndroid Build Coastguard Worker Check handling of NUL characters for print and COMSUB 10203*7c356e86SAndroid Build Coastguard Workerstdin: 10204*7c356e86SAndroid Build Coastguard Worker x=$(print '<\0>') 10205*7c356e86SAndroid Build Coastguard Worker print $(($(print '<\0>' | wc -c))) $(($(print "$x" | wc -c))) \ 10206*7c356e86SAndroid Build Coastguard Worker ${#x} "$x" '<\0>' 10207*7c356e86SAndroid Build Coastguard Workerexpected-stdout-pattern: 10208*7c356e86SAndroid Build Coastguard Worker /^4 3 2 <> <\0>$/ 10209*7c356e86SAndroid Build Coastguard Worker--- 10210*7c356e86SAndroid Build Coastguard Workername: print-array 10211*7c356e86SAndroid Build Coastguard Workerdescription: 10212*7c356e86SAndroid Build Coastguard Worker Check that print -A works as expected 10213*7c356e86SAndroid Build Coastguard Workerstdin: 10214*7c356e86SAndroid Build Coastguard Worker print -An 0x20AC 0xC3 0xBC 8#101 10215*7c356e86SAndroid Build Coastguard Worker set -U 10216*7c356e86SAndroid Build Coastguard Worker print -A 0x20AC 0xC3 0xBC 8#102 10217*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10218*7c356e86SAndroid Build Coastguard Worker �üA€Ã¼B 10219*7c356e86SAndroid Build Coastguard Worker--- 10220*7c356e86SAndroid Build Coastguard Workername: print-escapes 10221*7c356e86SAndroid Build Coastguard Workerdescription: 10222*7c356e86SAndroid Build Coastguard Worker Check backslash expansion by the print builtin 10223*7c356e86SAndroid Build Coastguard Workerstdin: 10224*7c356e86SAndroid Build Coastguard Worker print '\ \!\"\#\$\%\&'\\\''\(\)\*\+\,\-\.\/\0\1\2\3\4\5\6\7\8' \ 10225*7c356e86SAndroid Build Coastguard Worker '\9\:\;\<\=\>\?\@\A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T' \ 10226*7c356e86SAndroid Build Coastguard Worker '\U\V\W\X\Y\Z\[\\\]\^\_\`\a\b \d\e\f\g\h\i\j\k\l\m\n\o\p' \ 10227*7c356e86SAndroid Build Coastguard Worker '\q\r\s\t\u\v\w\x\y\z\{\|\}\~' '\u20acd' '\U20acd' '\x123' \ 10228*7c356e86SAndroid Build Coastguard Worker '\0x' '\0123' '\01234' | { 10229*7c356e86SAndroid Build Coastguard Worker # integer-base-one-3As 10230*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z11 pos=0 10231*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z5 hv=2147483647 10232*7c356e86SAndroid Build Coastguard Worker typeset -i1 wc=0x0A 10233*7c356e86SAndroid Build Coastguard Worker dasc= 10234*7c356e86SAndroid Build Coastguard Worker nl=${wc#1#} 10235*7c356e86SAndroid Build Coastguard Worker while IFS= read -r line; do 10236*7c356e86SAndroid Build Coastguard Worker line=$line$nl 10237*7c356e86SAndroid Build Coastguard Worker while [[ -n $line ]]; do 10238*7c356e86SAndroid Build Coastguard Worker hv=1#${line::1} 10239*7c356e86SAndroid Build Coastguard Worker if (( (pos & 15) == 0 )); then 10240*7c356e86SAndroid Build Coastguard Worker (( pos )) && print -r -- "$dasc|" 10241*7c356e86SAndroid Build Coastguard Worker print -n "${pos#16#} " 10242*7c356e86SAndroid Build Coastguard Worker dasc=' |' 10243*7c356e86SAndroid Build Coastguard Worker fi 10244*7c356e86SAndroid Build Coastguard Worker print -n "${hv#16#} " 10245*7c356e86SAndroid Build Coastguard Worker if (( (hv < 32) || (hv > 126) )); then 10246*7c356e86SAndroid Build Coastguard Worker dasc=$dasc. 10247*7c356e86SAndroid Build Coastguard Worker else 10248*7c356e86SAndroid Build Coastguard Worker dasc=$dasc${line::1} 10249*7c356e86SAndroid Build Coastguard Worker fi 10250*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10251*7c356e86SAndroid Build Coastguard Worker line=${line:1} 10252*7c356e86SAndroid Build Coastguard Worker done 10253*7c356e86SAndroid Build Coastguard Worker done 10254*7c356e86SAndroid Build Coastguard Worker while (( pos & 15 )); do 10255*7c356e86SAndroid Build Coastguard Worker print -n ' ' 10256*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10257*7c356e86SAndroid Build Coastguard Worker done 10258*7c356e86SAndroid Build Coastguard Worker (( hv == 2147483647 )) || print -r -- "$dasc|" 10259*7c356e86SAndroid Build Coastguard Worker } 10260*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10261*7c356e86SAndroid Build Coastguard Worker 00000000 5C 20 5C 21 5C 22 5C 23 - 5C 24 5C 25 5C 26 5C 27 |\ \!\"\#\$\%\&\'| 10262*7c356e86SAndroid Build Coastguard Worker 00000010 5C 28 5C 29 5C 2A 5C 2B - 5C 2C 5C 2D 5C 2E 5C 2F |\(\)\*\+\,\-\.\/| 10263*7c356e86SAndroid Build Coastguard Worker 00000020 5C 31 5C 32 5C 33 5C 34 - 5C 35 5C 36 5C 37 5C 38 |\1\2\3\4\5\6\7\8| 10264*7c356e86SAndroid Build Coastguard Worker 00000030 20 5C 39 5C 3A 5C 3B 5C - 3C 5C 3D 5C 3E 5C 3F 5C | \9\:\;\<\=\>\?\| 10265*7c356e86SAndroid Build Coastguard Worker 00000040 40 5C 41 5C 42 5C 43 5C - 44 1B 5C 46 5C 47 5C 48 |@\A\B\C\D.\F\G\H| 10266*7c356e86SAndroid Build Coastguard Worker 00000050 5C 49 5C 4A 5C 4B 5C 4C - 5C 4D 5C 4E 5C 4F 5C 50 |\I\J\K\L\M\N\O\P| 10267*7c356e86SAndroid Build Coastguard Worker 00000060 5C 51 5C 52 5C 53 5C 54 - 20 5C 55 5C 56 5C 57 5C |\Q\R\S\T \U\V\W\| 10268*7c356e86SAndroid Build Coastguard Worker 00000070 58 5C 59 5C 5A 5C 5B 5C - 5C 5D 5C 5E 5C 5F 5C 60 |X\Y\Z\[\\]\^\_\`| 10269*7c356e86SAndroid Build Coastguard Worker 00000080 07 08 20 20 5C 64 1B 0C - 5C 67 5C 68 5C 69 5C 6A |.. \d..\g\h\i\j| 10270*7c356e86SAndroid Build Coastguard Worker 00000090 5C 6B 5C 6C 5C 6D 0A 5C - 6F 5C 70 20 5C 71 0D 5C |\k\l\m.\o\p \q.\| 10271*7c356e86SAndroid Build Coastguard Worker 000000A0 73 09 5C 75 0B 5C 77 5C - 78 5C 79 5C 7A 5C 7B 5C |s.\u.\w\x\y\z\{\| 10272*7c356e86SAndroid Build Coastguard Worker 000000B0 7C 5C 7D 5C 7E 20 E2 82 - AC 64 20 EF BF BD 20 12 ||\}\~ ...d ... .| 10273*7c356e86SAndroid Build Coastguard Worker 000000C0 33 20 78 20 53 20 53 34 - 0A |3 x S S4.| 10274*7c356e86SAndroid Build Coastguard Worker--- 10275*7c356e86SAndroid Build Coastguard Workername: dollar-doublequoted-strings 10276*7c356e86SAndroid Build Coastguard Workerdescription: 10277*7c356e86SAndroid Build Coastguard Worker Check that a $ preceding "…" is ignored 10278*7c356e86SAndroid Build Coastguard Workerstdin: 10279*7c356e86SAndroid Build Coastguard Worker echo $"Localise me!" 10280*7c356e86SAndroid Build Coastguard Worker cat <<<$"Me too!" 10281*7c356e86SAndroid Build Coastguard Worker V=X 10282*7c356e86SAndroid Build Coastguard Worker aol=aol 10283*7c356e86SAndroid Build Coastguard Worker cat <<-$"aol" 10284*7c356e86SAndroid Build Coastguard Worker I do not take a $V for a V! 10285*7c356e86SAndroid Build Coastguard Worker aol 10286*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10287*7c356e86SAndroid Build Coastguard Worker Localise me! 10288*7c356e86SAndroid Build Coastguard Worker Me too! 10289*7c356e86SAndroid Build Coastguard Worker I do not take a $V for a V! 10290*7c356e86SAndroid Build Coastguard Worker--- 10291*7c356e86SAndroid Build Coastguard Workername: dollar-quoted-strings 10292*7c356e86SAndroid Build Coastguard Workerdescription: 10293*7c356e86SAndroid Build Coastguard Worker Check backslash expansion by $'…' strings 10294*7c356e86SAndroid Build Coastguard Workerstdin: 10295*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nfor x in "$@"; do print -r -- "$x"; done' >pfn 10296*7c356e86SAndroid Build Coastguard Worker chmod +x pfn 10297*7c356e86SAndroid Build Coastguard Worker ./pfn $'\ \!\"\#\$\%\&\'\(\)\*\+\,\-\.\/ \1\2\3\4\5\6' \ 10298*7c356e86SAndroid Build Coastguard Worker $'a\0b' $'a\01b' $'\7\8\9\:\;\<\=\>\?\@\A\B\C\D\E\F\G\H\I' \ 10299*7c356e86SAndroid Build Coastguard Worker $'\J\K\L\M\N\O\P\Q\R\S\T\U1\V\W\X\Y\Z\[\\\]\^\_\`\a\b\d\e' \ 10300*7c356e86SAndroid Build Coastguard Worker $'\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u1\v\w\x1\y\z\{\|\}\~ $x' \ 10301*7c356e86SAndroid Build Coastguard Worker $'\u20acd' $'\U20acd' $'\x123' $'fn\x0rd' $'\0234' $'\234' \ 10302*7c356e86SAndroid Build Coastguard Worker $'\2345' $'\ca' $'\c!' $'\c?' $'\c…' $'a\ 10303*7c356e86SAndroid Build Coastguard Worker b' | { 10304*7c356e86SAndroid Build Coastguard Worker # integer-base-one-3As 10305*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z11 pos=0 10306*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z5 hv=2147483647 10307*7c356e86SAndroid Build Coastguard Worker typeset -i1 wc=0x0A 10308*7c356e86SAndroid Build Coastguard Worker dasc= 10309*7c356e86SAndroid Build Coastguard Worker nl=${wc#1#} 10310*7c356e86SAndroid Build Coastguard Worker while IFS= read -r line; do 10311*7c356e86SAndroid Build Coastguard Worker line=$line$nl 10312*7c356e86SAndroid Build Coastguard Worker while [[ -n $line ]]; do 10313*7c356e86SAndroid Build Coastguard Worker hv=1#${line::1} 10314*7c356e86SAndroid Build Coastguard Worker if (( (pos & 15) == 0 )); then 10315*7c356e86SAndroid Build Coastguard Worker (( pos )) && print -r -- "$dasc|" 10316*7c356e86SAndroid Build Coastguard Worker print -n "${pos#16#} " 10317*7c356e86SAndroid Build Coastguard Worker dasc=' |' 10318*7c356e86SAndroid Build Coastguard Worker fi 10319*7c356e86SAndroid Build Coastguard Worker print -n "${hv#16#} " 10320*7c356e86SAndroid Build Coastguard Worker if (( (hv < 32) || (hv > 126) )); then 10321*7c356e86SAndroid Build Coastguard Worker dasc=$dasc. 10322*7c356e86SAndroid Build Coastguard Worker else 10323*7c356e86SAndroid Build Coastguard Worker dasc=$dasc${line::1} 10324*7c356e86SAndroid Build Coastguard Worker fi 10325*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10326*7c356e86SAndroid Build Coastguard Worker line=${line:1} 10327*7c356e86SAndroid Build Coastguard Worker done 10328*7c356e86SAndroid Build Coastguard Worker done 10329*7c356e86SAndroid Build Coastguard Worker while (( pos & 15 )); do 10330*7c356e86SAndroid Build Coastguard Worker print -n ' ' 10331*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10332*7c356e86SAndroid Build Coastguard Worker done 10333*7c356e86SAndroid Build Coastguard Worker (( hv == 2147483647 )) || print -r -- "$dasc|" 10334*7c356e86SAndroid Build Coastguard Worker } 10335*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10336*7c356e86SAndroid Build Coastguard Worker 00000000 20 21 22 23 24 25 26 27 - 28 29 2A 2B 2C 2D 2E 2F | !"#$%&'()*+,-./| 10337*7c356e86SAndroid Build Coastguard Worker 00000010 20 01 02 03 04 05 06 0A - 61 0A 61 01 62 0A 07 38 | .......a.a.b..8| 10338*7c356e86SAndroid Build Coastguard Worker 00000020 39 3A 3B 3C 3D 3E 3F 40 - 41 42 43 44 1B 46 47 48 |9:;<=>?@ABCD.FGH| 10339*7c356e86SAndroid Build Coastguard Worker 00000030 49 0A 4A 4B 4C 4D 4E 4F - 50 51 52 53 54 01 56 57 |I.JKLMNOPQRST.VW| 10340*7c356e86SAndroid Build Coastguard Worker 00000040 58 59 5A 5B 5C 5D 5E 5F - 60 07 08 64 1B 0A 0C 67 |XYZ[\]^_`..d...g| 10341*7c356e86SAndroid Build Coastguard Worker 00000050 68 69 6A 6B 6C 6D 0A 6F - 70 71 0D 73 09 01 0B 77 |hijklm.opq.s...w| 10342*7c356e86SAndroid Build Coastguard Worker 00000060 01 79 7A 7B 7C 7D 7E 20 - 24 78 0A E2 82 AC 64 0A |.yz{|}~ $x....d.| 10343*7c356e86SAndroid Build Coastguard Worker 00000070 EF BF BD 0A C4 A3 0A 66 - 6E 0A 13 34 0A 9C 0A 9C |.......fn..4....| 10344*7c356e86SAndroid Build Coastguard Worker 00000080 35 0A 01 0A 01 0A 7F 0A - 82 80 A6 0A 61 0A 62 0A |5...........a.b.| 10345*7c356e86SAndroid Build Coastguard Worker--- 10346*7c356e86SAndroid Build Coastguard Workername: dollar-quotes-in-heredocs-strings 10347*7c356e86SAndroid Build Coastguard Workerdescription: 10348*7c356e86SAndroid Build Coastguard Worker They are, however, not parsed in here documents, here strings 10349*7c356e86SAndroid Build Coastguard Worker (outside of string delimiters) or regular strings, but in 10350*7c356e86SAndroid Build Coastguard Worker parameter substitutions. 10351*7c356e86SAndroid Build Coastguard Workerstdin: 10352*7c356e86SAndroid Build Coastguard Worker cat <<EOF 10353*7c356e86SAndroid Build Coastguard Worker dollar = strchr(s, '$'); /* ' */ 10354*7c356e86SAndroid Build Coastguard Worker foo " bar \" baz 10355*7c356e86SAndroid Build Coastguard Worker EOF 10356*7c356e86SAndroid Build Coastguard Worker cat <<$'a\tb' 10357*7c356e86SAndroid Build Coastguard Worker a\tb 10358*7c356e86SAndroid Build Coastguard Worker a b 10359*7c356e86SAndroid Build Coastguard Worker cat <<<"dollar = strchr(s, '$'); /* ' */" 10360*7c356e86SAndroid Build Coastguard Worker cat <<<'dollar = strchr(s, '\''$'\''); /* '\'' */' 10361*7c356e86SAndroid Build Coastguard Worker x="dollar = strchr(s, '$'); /* ' */" 10362*7c356e86SAndroid Build Coastguard Worker cat <<<"$x" 10363*7c356e86SAndroid Build Coastguard Worker cat <<<$'a\E[0m\tb' 10364*7c356e86SAndroid Build Coastguard Worker unset nl; print -r -- "x${nl:=$'\n'}y" 10365*7c356e86SAndroid Build Coastguard Worker echo "1 foo\"bar" 10366*7c356e86SAndroid Build Coastguard Worker # cf & HEREDOC 10367*7c356e86SAndroid Build Coastguard Worker cat <<EOF 10368*7c356e86SAndroid Build Coastguard Worker 2 foo\"bar 10369*7c356e86SAndroid Build Coastguard Worker EOF 10370*7c356e86SAndroid Build Coastguard Worker # probably never reached for here strings? 10371*7c356e86SAndroid Build Coastguard Worker cat <<<"3 foo\"bar" 10372*7c356e86SAndroid Build Coastguard Worker cat <<<"4 foo\\\"bar" 10373*7c356e86SAndroid Build Coastguard Worker cat <<<'5 foo\"bar' 10374*7c356e86SAndroid Build Coastguard Worker # old scripts use this (e.g. ncurses) 10375*7c356e86SAndroid Build Coastguard Worker echo "^$" 10376*7c356e86SAndroid Build Coastguard Worker # make sure this works, outside of quotes 10377*7c356e86SAndroid Build Coastguard Worker cat <<<'7'$'\t''.' 10378*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10379*7c356e86SAndroid Build Coastguard Worker dollar = strchr(s, '$'); /* ' */ 10380*7c356e86SAndroid Build Coastguard Worker foo " bar \" baz 10381*7c356e86SAndroid Build Coastguard Worker a\tb 10382*7c356e86SAndroid Build Coastguard Worker dollar = strchr(s, '$'); /* ' */ 10383*7c356e86SAndroid Build Coastguard Worker dollar = strchr(s, '$'); /* ' */ 10384*7c356e86SAndroid Build Coastguard Worker dollar = strchr(s, '$'); /* ' */ 10385*7c356e86SAndroid Build Coastguard Worker a[0m b 10386*7c356e86SAndroid Build Coastguard Worker x 10387*7c356e86SAndroid Build Coastguard Worker y 10388*7c356e86SAndroid Build Coastguard Worker 1 foo"bar 10389*7c356e86SAndroid Build Coastguard Worker 2 foo\"bar 10390*7c356e86SAndroid Build Coastguard Worker 3 foo"bar 10391*7c356e86SAndroid Build Coastguard Worker 4 foo\"bar 10392*7c356e86SAndroid Build Coastguard Worker 5 foo\"bar 10393*7c356e86SAndroid Build Coastguard Worker ^$ 10394*7c356e86SAndroid Build Coastguard Worker 7 . 10395*7c356e86SAndroid Build Coastguard Worker--- 10396*7c356e86SAndroid Build Coastguard Workername: dot-needs-argument 10397*7c356e86SAndroid Build Coastguard Workerdescription: 10398*7c356e86SAndroid Build Coastguard Worker check Debian #415167 solution: '.' without arguments should fail 10399*7c356e86SAndroid Build Coastguard Workerstdin: 10400*7c356e86SAndroid Build Coastguard Worker "$__progname" -c . 10401*7c356e86SAndroid Build Coastguard Worker "$__progname" -c source 10402*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 10403*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 10404*7c356e86SAndroid Build Coastguard Worker /\.: missing argument.*\n.*source: missing argument/ 10405*7c356e86SAndroid Build Coastguard Worker--- 10406*7c356e86SAndroid Build Coastguard Workername: dot-errorlevel 10407*7c356e86SAndroid Build Coastguard Workerdescription: 10408*7c356e86SAndroid Build Coastguard Worker Ensure dot resets $? 10409*7c356e86SAndroid Build Coastguard Workerstdin: 10410*7c356e86SAndroid Build Coastguard Worker :>dotfile 10411*7c356e86SAndroid Build Coastguard Worker (exit 42) 10412*7c356e86SAndroid Build Coastguard Worker . ./dotfile 10413*7c356e86SAndroid Build Coastguard Worker echo 1 $? . 10414*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10415*7c356e86SAndroid Build Coastguard Worker 1 0 . 10416*7c356e86SAndroid Build Coastguard Worker--- 10417*7c356e86SAndroid Build Coastguard Workername: alias-function-no-conflict 10418*7c356e86SAndroid Build Coastguard Workerdescription: 10419*7c356e86SAndroid Build Coastguard Worker make aliases not conflict with function definitions 10420*7c356e86SAndroid Build Coastguard Workerstdin: 10421*7c356e86SAndroid Build Coastguard Worker # POSIX function can be defined, but alias overrides it 10422*7c356e86SAndroid Build Coastguard Worker alias foo='echo bar' 10423*7c356e86SAndroid Build Coastguard Worker foo 10424*7c356e86SAndroid Build Coastguard Worker foo() { 10425*7c356e86SAndroid Build Coastguard Worker echo baz 10426*7c356e86SAndroid Build Coastguard Worker } 10427*7c356e86SAndroid Build Coastguard Worker foo 10428*7c356e86SAndroid Build Coastguard Worker unset -f foo 10429*7c356e86SAndroid Build Coastguard Worker foo 2>/dev/null || echo rab 10430*7c356e86SAndroid Build Coastguard Worker # alias overrides ksh function 10431*7c356e86SAndroid Build Coastguard Worker alias korn='echo bar' 10432*7c356e86SAndroid Build Coastguard Worker korn 10433*7c356e86SAndroid Build Coastguard Worker function korn { 10434*7c356e86SAndroid Build Coastguard Worker echo baz 10435*7c356e86SAndroid Build Coastguard Worker } 10436*7c356e86SAndroid Build Coastguard Worker korn 10437*7c356e86SAndroid Build Coastguard Worker # alias temporarily overrides POSIX function 10438*7c356e86SAndroid Build Coastguard Worker bla() { 10439*7c356e86SAndroid Build Coastguard Worker echo bfn 10440*7c356e86SAndroid Build Coastguard Worker } 10441*7c356e86SAndroid Build Coastguard Worker bla 10442*7c356e86SAndroid Build Coastguard Worker alias bla='echo bal' 10443*7c356e86SAndroid Build Coastguard Worker bla 10444*7c356e86SAndroid Build Coastguard Worker unalias bla 10445*7c356e86SAndroid Build Coastguard Worker bla 10446*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10447*7c356e86SAndroid Build Coastguard Worker bar 10448*7c356e86SAndroid Build Coastguard Worker bar 10449*7c356e86SAndroid Build Coastguard Worker bar 10450*7c356e86SAndroid Build Coastguard Worker bar 10451*7c356e86SAndroid Build Coastguard Worker bar 10452*7c356e86SAndroid Build Coastguard Worker bfn 10453*7c356e86SAndroid Build Coastguard Worker bal 10454*7c356e86SAndroid Build Coastguard Worker bfn 10455*7c356e86SAndroid Build Coastguard Worker--- 10456*7c356e86SAndroid Build Coastguard Workername: bash-function-parens 10457*7c356e86SAndroid Build Coastguard Workerdescription: 10458*7c356e86SAndroid Build Coastguard Worker ensure the keyword function is ignored when preceding 10459*7c356e86SAndroid Build Coastguard Worker POSIX style function declarations (bashism) 10460*7c356e86SAndroid Build Coastguard Workerstdin: 10461*7c356e86SAndroid Build Coastguard Worker mk() { 10462*7c356e86SAndroid Build Coastguard Worker echo '#!'"$__progname" 10463*7c356e86SAndroid Build Coastguard Worker echo "$1 {" 10464*7c356e86SAndroid Build Coastguard Worker echo ' echo "bar='\''$0'\'\" 10465*7c356e86SAndroid Build Coastguard Worker echo '}' 10466*7c356e86SAndroid Build Coastguard Worker print -r -- "${2:-foo}" 10467*7c356e86SAndroid Build Coastguard Worker } 10468*7c356e86SAndroid Build Coastguard Worker mk 'function foo' >f-korn 10469*7c356e86SAndroid Build Coastguard Worker mk 'foo ()' >f-dash 10470*7c356e86SAndroid Build Coastguard Worker mk 'function foo ()' >f-bash 10471*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nprint -r -- "${0%/f-argh}"' >f-argh 10472*7c356e86SAndroid Build Coastguard Worker chmod +x f-* 10473*7c356e86SAndroid Build Coastguard Worker u=$(./f-argh) 10474*7c356e86SAndroid Build Coastguard Worker x="korn: $(./f-korn)"; echo "${x/@("$u")/.}" 10475*7c356e86SAndroid Build Coastguard Worker x="dash: $(./f-dash)"; echo "${x/@("$u")/.}" 10476*7c356e86SAndroid Build Coastguard Worker x="bash: $(./f-bash)"; echo "${x/@("$u")/.}" 10477*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10478*7c356e86SAndroid Build Coastguard Worker korn: bar='foo' 10479*7c356e86SAndroid Build Coastguard Worker dash: bar='./f-dash' 10480*7c356e86SAndroid Build Coastguard Worker bash: bar='./f-bash' 10481*7c356e86SAndroid Build Coastguard Worker--- 10482*7c356e86SAndroid Build Coastguard Workername: integer-base-one-1 10483*7c356e86SAndroid Build Coastguard Workerdescription: 10484*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 works 10485*7c356e86SAndroid Build Coastguard Workerstdin: 10486*7c356e86SAndroid Build Coastguard Worker set -U 10487*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 i0=1#� i1=1#€ 10488*7c356e86SAndroid Build Coastguard Worker typeset -i1 o0a=64 10489*7c356e86SAndroid Build Coastguard Worker typeset -i1 o1a=0x263A 10490*7c356e86SAndroid Build Coastguard Worker typeset -Uui1 o0b=0x7E 10491*7c356e86SAndroid Build Coastguard Worker typeset -Uui1 o1b=0xFDD0 10492*7c356e86SAndroid Build Coastguard Worker integer px=0xCAFE 'p0=1# ' p1=1#… pl=1#f 10493*7c356e86SAndroid Build Coastguard Worker echo "in <$i0> <$i1>" 10494*7c356e86SAndroid Build Coastguard Worker echo "out <${o0a#1#}|${o0b#1#}> <${o1a#1#}|${o1b#1#}>" 10495*7c356e86SAndroid Build Coastguard Worker typeset -Uui1 i0 i1 10496*7c356e86SAndroid Build Coastguard Worker echo "pass <$px> <$p0> <$p1> <$pl> <${i0#1#}|${i1#1#}>" 10497*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 tv1=1#~ tv2=1# tv3=1#� tv4=1#� tv5=1#� tv6=1#� tv7=1# tv8=1# 10498*7c356e86SAndroid Build Coastguard Worker echo "specX <${tv1#16#}> <${tv2#16#}> <${tv3#16#}> <${tv4#16#}> <${tv5#16#}> <${tv6#16#}> <${tv7#16#}> <${tv8#16#}>" 10499*7c356e86SAndroid Build Coastguard Worker typeset -i1 tv1 tv2 tv3 tv4 tv5 tv6 tv7 tv8 10500*7c356e86SAndroid Build Coastguard Worker echo "specW <${tv1#1#}> <${tv2#1#}> <${tv3#1#}> <${tv4#1#}> <${tv5#1#}> <${tv6#1#}> <${tv7#1#}> <${tv8#1#}>" 10501*7c356e86SAndroid Build Coastguard Worker typeset -i1 xs1=0xEF7F xs2=0xEF80 xs3=0xFDD0 10502*7c356e86SAndroid Build Coastguard Worker echo "specU <${xs1#1#}> <${xs2#1#}> <${xs3#1#}>" 10503*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10504*7c356e86SAndroid Build Coastguard Worker in <16#EFEF> <16#20AC> 10505*7c356e86SAndroid Build Coastguard Worker out <@|~> <☺|> 10506*7c356e86SAndroid Build Coastguard Worker pass <16#cafe> <1# > <1#…> <1#f> <�|€> 10507*7c356e86SAndroid Build Coastguard Worker specX <7E> <7F> <EF80> <EF81> <EFC0> <EFC1> <A0> <80> 10508*7c356e86SAndroid Build Coastguard Worker specW <~> <> <�> <�> <�> <�> < > <> 10509*7c356e86SAndroid Build Coastguard Worker specU <> <�> <> 10510*7c356e86SAndroid Build Coastguard Worker--- 10511*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2a 10512*7c356e86SAndroid Build Coastguard Workerdescription: 10513*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 stops at correct characters 10514*7c356e86SAndroid Build Coastguard Workerstdin: 10515*7c356e86SAndroid Build Coastguard Worker set -U 10516*7c356e86SAndroid Build Coastguard Worker integer x=1#foo 10517*7c356e86SAndroid Build Coastguard Worker echo /$x/ 10518*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 10519*7c356e86SAndroid Build Coastguard Worker /1#foo: unexpected 'oo'/ 10520*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 10521*7c356e86SAndroid Build Coastguard Worker--- 10522*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2b 10523*7c356e86SAndroid Build Coastguard Workerdescription: 10524*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 stops at correct characters 10525*7c356e86SAndroid Build Coastguard Workerstdin: 10526*7c356e86SAndroid Build Coastguard Worker set -U 10527*7c356e86SAndroid Build Coastguard Worker integer x=1#�� 10528*7c356e86SAndroid Build Coastguard Worker echo /$x/ 10529*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 10530*7c356e86SAndroid Build Coastguard Worker /1#��: unexpected '�'/ 10531*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 10532*7c356e86SAndroid Build Coastguard Worker--- 10533*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2c1 10534*7c356e86SAndroid Build Coastguard Workerdescription: 10535*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 stops at correct characters 10536*7c356e86SAndroid Build Coastguard Workerstdin: 10537*7c356e86SAndroid Build Coastguard Worker set -U 10538*7c356e86SAndroid Build Coastguard Worker integer x=1#… 10539*7c356e86SAndroid Build Coastguard Worker echo /$x/ 10540*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10541*7c356e86SAndroid Build Coastguard Worker /1#…/ 10542*7c356e86SAndroid Build Coastguard Worker--- 10543*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2c2 10544*7c356e86SAndroid Build Coastguard Workerdescription: 10545*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 stops at correct characters 10546*7c356e86SAndroid Build Coastguard Workerstdin: 10547*7c356e86SAndroid Build Coastguard Worker set +U 10548*7c356e86SAndroid Build Coastguard Worker integer x=1#… 10549*7c356e86SAndroid Build Coastguard Worker echo /$x/ 10550*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 10551*7c356e86SAndroid Build Coastguard Worker /1#…: unexpected '�'/ 10552*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 10553*7c356e86SAndroid Build Coastguard Worker--- 10554*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d1 10555*7c356e86SAndroid Build Coastguard Workerdescription: 10556*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 handles octets okay 10557*7c356e86SAndroid Build Coastguard Workerstdin: 10558*7c356e86SAndroid Build Coastguard Worker set -U 10559*7c356e86SAndroid Build Coastguard Worker typeset -i16 x=1#� 10560*7c356e86SAndroid Build Coastguard Worker echo /$x/ # invalid utf-8 10561*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10562*7c356e86SAndroid Build Coastguard Worker /16#efff/ 10563*7c356e86SAndroid Build Coastguard Worker--- 10564*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d2 10565*7c356e86SAndroid Build Coastguard Workerdescription: 10566*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 handles octets 10567*7c356e86SAndroid Build Coastguard Workerstdin: 10568*7c356e86SAndroid Build Coastguard Worker set -U 10569*7c356e86SAndroid Build Coastguard Worker typeset -i16 x=1#� 10570*7c356e86SAndroid Build Coastguard Worker echo /$x/ # invalid 2-byte 10571*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10572*7c356e86SAndroid Build Coastguard Worker /16#efc2/ 10573*7c356e86SAndroid Build Coastguard Worker--- 10574*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d3 10575*7c356e86SAndroid Build Coastguard Workerdescription: 10576*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 handles octets 10577*7c356e86SAndroid Build Coastguard Workerstdin: 10578*7c356e86SAndroid Build Coastguard Worker set -U 10579*7c356e86SAndroid Build Coastguard Worker typeset -i16 x=1#� 10580*7c356e86SAndroid Build Coastguard Worker echo /$x/ # invalid 2-byte 10581*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10582*7c356e86SAndroid Build Coastguard Worker /16#efef/ 10583*7c356e86SAndroid Build Coastguard Worker--- 10584*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d4 10585*7c356e86SAndroid Build Coastguard Workerdescription: 10586*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 stops at invalid input 10587*7c356e86SAndroid Build Coastguard Workerstdin: 10588*7c356e86SAndroid Build Coastguard Worker set -U 10589*7c356e86SAndroid Build Coastguard Worker typeset -i16 x=1#�� 10590*7c356e86SAndroid Build Coastguard Worker echo /$x/ # invalid 3-byte 10591*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 10592*7c356e86SAndroid Build Coastguard Worker /1#��: unexpected '�'/ 10593*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 10594*7c356e86SAndroid Build Coastguard Worker--- 10595*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d5 10596*7c356e86SAndroid Build Coastguard Workerdescription: 10597*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 stops at invalid input 10598*7c356e86SAndroid Build Coastguard Workerstdin: 10599*7c356e86SAndroid Build Coastguard Worker set -U 10600*7c356e86SAndroid Build Coastguard Worker typeset -i16 x=1#�� 10601*7c356e86SAndroid Build Coastguard Worker echo /$x/ # non-minimalistic 10602*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 10603*7c356e86SAndroid Build Coastguard Worker /1#��: unexpected '�'/ 10604*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 10605*7c356e86SAndroid Build Coastguard Worker--- 10606*7c356e86SAndroid Build Coastguard Workername: integer-base-one-2d6 10607*7c356e86SAndroid Build Coastguard Workerdescription: 10608*7c356e86SAndroid Build Coastguard Worker check if the use of fake integer base 1 stops at invalid input 10609*7c356e86SAndroid Build Coastguard Workerstdin: 10610*7c356e86SAndroid Build Coastguard Worker set -U 10611*7c356e86SAndroid Build Coastguard Worker typeset -i16 x=1#��� 10612*7c356e86SAndroid Build Coastguard Worker echo /$x/ # non-minimalistic 10613*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 10614*7c356e86SAndroid Build Coastguard Worker /1#���: unexpected '�'/ 10615*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 10616*7c356e86SAndroid Build Coastguard Worker--- 10617*7c356e86SAndroid Build Coastguard Workername: integer-base-one-3As 10618*7c356e86SAndroid Build Coastguard Workerdescription: 10619*7c356e86SAndroid Build Coastguard Worker some sample code for hexdumping 10620*7c356e86SAndroid Build Coastguard Worker not NUL safe; input lines must be NL terminated 10621*7c356e86SAndroid Build Coastguard Workerstdin: 10622*7c356e86SAndroid Build Coastguard Worker { 10623*7c356e86SAndroid Build Coastguard Worker print 'Hello, World!\\\nこんにちは!' 10624*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 i=0x100 10625*7c356e86SAndroid Build Coastguard Worker # change that to 0xFF once we can handle embedded 10626*7c356e86SAndroid Build Coastguard Worker # NUL characters in strings / here documents 10627*7c356e86SAndroid Build Coastguard Worker while (( i++ < 0x1FF )); do 10628*7c356e86SAndroid Build Coastguard Worker print -n "\x${i#16#1}" 10629*7c356e86SAndroid Build Coastguard Worker done 10630*7c356e86SAndroid Build Coastguard Worker print '\0z' 10631*7c356e86SAndroid Build Coastguard Worker } | { 10632*7c356e86SAndroid Build Coastguard Worker # integer-base-one-3As 10633*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z11 pos=0 10634*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z5 hv=2147483647 10635*7c356e86SAndroid Build Coastguard Worker typeset -i1 wc=0x0A 10636*7c356e86SAndroid Build Coastguard Worker dasc= 10637*7c356e86SAndroid Build Coastguard Worker nl=${wc#1#} 10638*7c356e86SAndroid Build Coastguard Worker while IFS= read -r line; do 10639*7c356e86SAndroid Build Coastguard Worker line=$line$nl 10640*7c356e86SAndroid Build Coastguard Worker while [[ -n $line ]]; do 10641*7c356e86SAndroid Build Coastguard Worker hv=1#${line::1} 10642*7c356e86SAndroid Build Coastguard Worker if (( (pos & 15) == 0 )); then 10643*7c356e86SAndroid Build Coastguard Worker (( pos )) && print -r -- "$dasc|" 10644*7c356e86SAndroid Build Coastguard Worker print -n "${pos#16#} " 10645*7c356e86SAndroid Build Coastguard Worker dasc=' |' 10646*7c356e86SAndroid Build Coastguard Worker fi 10647*7c356e86SAndroid Build Coastguard Worker print -n "${hv#16#} " 10648*7c356e86SAndroid Build Coastguard Worker if (( (hv < 32) || (hv > 126) )); then 10649*7c356e86SAndroid Build Coastguard Worker dasc=$dasc. 10650*7c356e86SAndroid Build Coastguard Worker else 10651*7c356e86SAndroid Build Coastguard Worker dasc=$dasc${line::1} 10652*7c356e86SAndroid Build Coastguard Worker fi 10653*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10654*7c356e86SAndroid Build Coastguard Worker line=${line:1} 10655*7c356e86SAndroid Build Coastguard Worker done 10656*7c356e86SAndroid Build Coastguard Worker done 10657*7c356e86SAndroid Build Coastguard Worker while (( pos & 15 )); do 10658*7c356e86SAndroid Build Coastguard Worker print -n ' ' 10659*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10660*7c356e86SAndroid Build Coastguard Worker done 10661*7c356e86SAndroid Build Coastguard Worker (( hv == 2147483647 )) || print -r -- "$dasc|" 10662*7c356e86SAndroid Build Coastguard Worker } 10663*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10664*7c356e86SAndroid Build Coastguard Worker 00000000 48 65 6C 6C 6F 2C 20 57 - 6F 72 6C 64 21 5C 0A E3 |Hello, World!\..| 10665*7c356e86SAndroid Build Coastguard Worker 00000010 81 93 E3 82 93 E3 81 AB - E3 81 A1 E3 81 AF EF BC |................| 10666*7c356e86SAndroid Build Coastguard Worker 00000020 81 0A 01 02 03 04 05 06 - 07 08 09 0A 0B 0C 0D 0E |................| 10667*7c356e86SAndroid Build Coastguard Worker 00000030 0F 10 11 12 13 14 15 16 - 17 18 19 1A 1B 1C 1D 1E |................| 10668*7c356e86SAndroid Build Coastguard Worker 00000040 1F 20 21 22 23 24 25 26 - 27 28 29 2A 2B 2C 2D 2E |. !"#$%&'()*+,-.| 10669*7c356e86SAndroid Build Coastguard Worker 00000050 2F 30 31 32 33 34 35 36 - 37 38 39 3A 3B 3C 3D 3E |/0123456789:;<=>| 10670*7c356e86SAndroid Build Coastguard Worker 00000060 3F 40 41 42 43 44 45 46 - 47 48 49 4A 4B 4C 4D 4E |?@ABCDEFGHIJKLMN| 10671*7c356e86SAndroid Build Coastguard Worker 00000070 4F 50 51 52 53 54 55 56 - 57 58 59 5A 5B 5C 5D 5E |OPQRSTUVWXYZ[\]^| 10672*7c356e86SAndroid Build Coastguard Worker 00000080 5F 60 61 62 63 64 65 66 - 67 68 69 6A 6B 6C 6D 6E |_`abcdefghijklmn| 10673*7c356e86SAndroid Build Coastguard Worker 00000090 6F 70 71 72 73 74 75 76 - 77 78 79 7A 7B 7C 7D 7E |opqrstuvwxyz{|}~| 10674*7c356e86SAndroid Build Coastguard Worker 000000A0 7F 80 81 82 83 84 85 86 - 87 88 89 8A 8B 8C 8D 8E |................| 10675*7c356e86SAndroid Build Coastguard Worker 000000B0 8F 90 91 92 93 94 95 96 - 97 98 99 9A 9B 9C 9D 9E |................| 10676*7c356e86SAndroid Build Coastguard Worker 000000C0 9F A0 A1 A2 A3 A4 A5 A6 - A7 A8 A9 AA AB AC AD AE |................| 10677*7c356e86SAndroid Build Coastguard Worker 000000D0 AF B0 B1 B2 B3 B4 B5 B6 - B7 B8 B9 BA BB BC BD BE |................| 10678*7c356e86SAndroid Build Coastguard Worker 000000E0 BF C0 C1 C2 C3 C4 C5 C6 - C7 C8 C9 CA CB CC CD CE |................| 10679*7c356e86SAndroid Build Coastguard Worker 000000F0 CF D0 D1 D2 D3 D4 D5 D6 - D7 D8 D9 DA DB DC DD DE |................| 10680*7c356e86SAndroid Build Coastguard Worker 00000100 DF E0 E1 E2 E3 E4 E5 E6 - E7 E8 E9 EA EB EC ED EE |................| 10681*7c356e86SAndroid Build Coastguard Worker 00000110 EF F0 F1 F2 F3 F4 F5 F6 - F7 F8 F9 FA FB FC FD FE |................| 10682*7c356e86SAndroid Build Coastguard Worker 00000120 FF 7A 0A - |.z.| 10683*7c356e86SAndroid Build Coastguard Worker--- 10684*7c356e86SAndroid Build Coastguard Workername: integer-base-one-3Ws 10685*7c356e86SAndroid Build Coastguard Workerdescription: 10686*7c356e86SAndroid Build Coastguard Worker some sample code for hexdumping UCS-2 10687*7c356e86SAndroid Build Coastguard Worker not NUL safe; input lines must be NL terminated 10688*7c356e86SAndroid Build Coastguard Workerstdin: 10689*7c356e86SAndroid Build Coastguard Worker set -U 10690*7c356e86SAndroid Build Coastguard Worker { 10691*7c356e86SAndroid Build Coastguard Worker print 'Hello, World!\\\nこんにちは!' 10692*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 i=0x100 10693*7c356e86SAndroid Build Coastguard Worker # change that to 0xFF once we can handle embedded 10694*7c356e86SAndroid Build Coastguard Worker # NUL characters in strings / here documents 10695*7c356e86SAndroid Build Coastguard Worker while (( i++ < 0x1FF )); do 10696*7c356e86SAndroid Build Coastguard Worker print -n "\u${i#16#1}" 10697*7c356e86SAndroid Build Coastguard Worker done 10698*7c356e86SAndroid Build Coastguard Worker print 10699*7c356e86SAndroid Build Coastguard Worker print \\xff # invalid utf-8 10700*7c356e86SAndroid Build Coastguard Worker print \\xc2 # invalid 2-byte 10701*7c356e86SAndroid Build Coastguard Worker print \\xef\\xbf\\xc0 # invalid 3-byte 10702*7c356e86SAndroid Build Coastguard Worker print \\xc0\\x80 # non-minimalistic 10703*7c356e86SAndroid Build Coastguard Worker print \\xe0\\x80\\x80 # non-minimalistic 10704*7c356e86SAndroid Build Coastguard Worker print '�' # end of range 10705*7c356e86SAndroid Build Coastguard Worker print '\0z' # embedded NUL 10706*7c356e86SAndroid Build Coastguard Worker } | { 10707*7c356e86SAndroid Build Coastguard Worker # integer-base-one-3Ws 10708*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z11 pos=0 10709*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z7 hv 10710*7c356e86SAndroid Build Coastguard Worker typeset -i1 wc=0x0A 10711*7c356e86SAndroid Build Coastguard Worker typeset -i lpos 10712*7c356e86SAndroid Build Coastguard Worker dasc= 10713*7c356e86SAndroid Build Coastguard Worker nl=${wc#1#} 10714*7c356e86SAndroid Build Coastguard Worker while IFS= read -r line; do 10715*7c356e86SAndroid Build Coastguard Worker line=$line$nl 10716*7c356e86SAndroid Build Coastguard Worker lpos=0 10717*7c356e86SAndroid Build Coastguard Worker while (( lpos < ${#line} )); do 10718*7c356e86SAndroid Build Coastguard Worker wc=1#${line:(lpos++):1} 10719*7c356e86SAndroid Build Coastguard Worker if (( (wc < 32) || \ 10720*7c356e86SAndroid Build Coastguard Worker ((wc > 126) && (wc < 160)) )); then 10721*7c356e86SAndroid Build Coastguard Worker dch=. 10722*7c356e86SAndroid Build Coastguard Worker elif (( (wc & 0xFF80) == 0xEF80 )); then 10723*7c356e86SAndroid Build Coastguard Worker dch=� 10724*7c356e86SAndroid Build Coastguard Worker else 10725*7c356e86SAndroid Build Coastguard Worker dch=${wc#1#} 10726*7c356e86SAndroid Build Coastguard Worker fi 10727*7c356e86SAndroid Build Coastguard Worker if (( (pos & 7) == 7 )); then 10728*7c356e86SAndroid Build Coastguard Worker dasc=$dasc$dch 10729*7c356e86SAndroid Build Coastguard Worker dch= 10730*7c356e86SAndroid Build Coastguard Worker elif (( (pos & 7) == 0 )); then 10731*7c356e86SAndroid Build Coastguard Worker (( pos )) && print -r -- "$dasc|" 10732*7c356e86SAndroid Build Coastguard Worker print -n "${pos#16#} " 10733*7c356e86SAndroid Build Coastguard Worker dasc=' |' 10734*7c356e86SAndroid Build Coastguard Worker fi 10735*7c356e86SAndroid Build Coastguard Worker let hv=wc 10736*7c356e86SAndroid Build Coastguard Worker print -n "${hv#16#} " 10737*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 7) == 3 )) && \ 10738*7c356e86SAndroid Build Coastguard Worker print -n -- '- ' 10739*7c356e86SAndroid Build Coastguard Worker dasc=$dasc$dch 10740*7c356e86SAndroid Build Coastguard Worker done 10741*7c356e86SAndroid Build Coastguard Worker done 10742*7c356e86SAndroid Build Coastguard Worker while (( pos & 7 )); do 10743*7c356e86SAndroid Build Coastguard Worker print -n ' ' 10744*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 7) == 3 )) && print -n -- '- ' 10745*7c356e86SAndroid Build Coastguard Worker done 10746*7c356e86SAndroid Build Coastguard Worker (( hv == 2147483647 )) || print -r -- "$dasc|" 10747*7c356e86SAndroid Build Coastguard Worker } 10748*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10749*7c356e86SAndroid Build Coastguard Worker 00000000 0048 0065 006C 006C - 006F 002C 0020 0057 |Hello, W| 10750*7c356e86SAndroid Build Coastguard Worker 00000008 006F 0072 006C 0064 - 0021 005C 000A 3053 |orld!\.こ| 10751*7c356e86SAndroid Build Coastguard Worker 00000010 3093 306B 3061 306F - FF01 000A 0001 0002 |んにちは!...| 10752*7c356e86SAndroid Build Coastguard Worker 00000018 0003 0004 0005 0006 - 0007 0008 0009 000A |........| 10753*7c356e86SAndroid Build Coastguard Worker 00000020 000B 000C 000D 000E - 000F 0010 0011 0012 |........| 10754*7c356e86SAndroid Build Coastguard Worker 00000028 0013 0014 0015 0016 - 0017 0018 0019 001A |........| 10755*7c356e86SAndroid Build Coastguard Worker 00000030 001B 001C 001D 001E - 001F 0020 0021 0022 |..... !"| 10756*7c356e86SAndroid Build Coastguard Worker 00000038 0023 0024 0025 0026 - 0027 0028 0029 002A |#$%&'()*| 10757*7c356e86SAndroid Build Coastguard Worker 00000040 002B 002C 002D 002E - 002F 0030 0031 0032 |+,-./012| 10758*7c356e86SAndroid Build Coastguard Worker 00000048 0033 0034 0035 0036 - 0037 0038 0039 003A |3456789:| 10759*7c356e86SAndroid Build Coastguard Worker 00000050 003B 003C 003D 003E - 003F 0040 0041 0042 |;<=>?@AB| 10760*7c356e86SAndroid Build Coastguard Worker 00000058 0043 0044 0045 0046 - 0047 0048 0049 004A |CDEFGHIJ| 10761*7c356e86SAndroid Build Coastguard Worker 00000060 004B 004C 004D 004E - 004F 0050 0051 0052 |KLMNOPQR| 10762*7c356e86SAndroid Build Coastguard Worker 00000068 0053 0054 0055 0056 - 0057 0058 0059 005A |STUVWXYZ| 10763*7c356e86SAndroid Build Coastguard Worker 00000070 005B 005C 005D 005E - 005F 0060 0061 0062 |[\]^_`ab| 10764*7c356e86SAndroid Build Coastguard Worker 00000078 0063 0064 0065 0066 - 0067 0068 0069 006A |cdefghij| 10765*7c356e86SAndroid Build Coastguard Worker 00000080 006B 006C 006D 006E - 006F 0070 0071 0072 |klmnopqr| 10766*7c356e86SAndroid Build Coastguard Worker 00000088 0073 0074 0075 0076 - 0077 0078 0079 007A |stuvwxyz| 10767*7c356e86SAndroid Build Coastguard Worker 00000090 007B 007C 007D 007E - 007F 0080 0081 0082 |{|}~....| 10768*7c356e86SAndroid Build Coastguard Worker 00000098 0083 0084 0085 0086 - 0087 0088 0089 008A |........| 10769*7c356e86SAndroid Build Coastguard Worker 000000A0 008B 008C 008D 008E - 008F 0090 0091 0092 |........| 10770*7c356e86SAndroid Build Coastguard Worker 000000A8 0093 0094 0095 0096 - 0097 0098 0099 009A |........| 10771*7c356e86SAndroid Build Coastguard Worker 000000B0 009B 009C 009D 009E - 009F 00A0 00A1 00A2 |..... ¡¢| 10772*7c356e86SAndroid Build Coastguard Worker 000000B8 00A3 00A4 00A5 00A6 - 00A7 00A8 00A9 00AA |£¤¥¦§¨©ª| 10773*7c356e86SAndroid Build Coastguard Worker 000000C0 00AB 00AC 00AD 00AE - 00AF 00B0 00B1 00B2 |«¬®¯°±²| 10774*7c356e86SAndroid Build Coastguard Worker 000000C8 00B3 00B4 00B5 00B6 - 00B7 00B8 00B9 00BA |³´µ¶·¸¹º| 10775*7c356e86SAndroid Build Coastguard Worker 000000D0 00BB 00BC 00BD 00BE - 00BF 00C0 00C1 00C2 |»¼½¾¿ÀÁÂ| 10776*7c356e86SAndroid Build Coastguard Worker 000000D8 00C3 00C4 00C5 00C6 - 00C7 00C8 00C9 00CA |ÃÄÅÆÇÈÉÊ| 10777*7c356e86SAndroid Build Coastguard Worker 000000E0 00CB 00CC 00CD 00CE - 00CF 00D0 00D1 00D2 |ËÌÍÎÏÐÑÒ| 10778*7c356e86SAndroid Build Coastguard Worker 000000E8 00D3 00D4 00D5 00D6 - 00D7 00D8 00D9 00DA |ÓÔÕÖרÙÚ| 10779*7c356e86SAndroid Build Coastguard Worker 000000F0 00DB 00DC 00DD 00DE - 00DF 00E0 00E1 00E2 |ÛÜÝÞßàáâ| 10780*7c356e86SAndroid Build Coastguard Worker 000000F8 00E3 00E4 00E5 00E6 - 00E7 00E8 00E9 00EA |ãäåæçèéê| 10781*7c356e86SAndroid Build Coastguard Worker 00000100 00EB 00EC 00ED 00EE - 00EF 00F0 00F1 00F2 |ëìíîïðñò| 10782*7c356e86SAndroid Build Coastguard Worker 00000108 00F3 00F4 00F5 00F6 - 00F7 00F8 00F9 00FA |óôõö÷øùú| 10783*7c356e86SAndroid Build Coastguard Worker 00000110 00FB 00FC 00FD 00FE - 00FF 000A EFFF 000A |ûüýþÿ.�.| 10784*7c356e86SAndroid Build Coastguard Worker 00000118 EFC2 000A EFEF EFBF - EFC0 000A EFC0 EF80 |�.���.��| 10785*7c356e86SAndroid Build Coastguard Worker 00000120 000A EFE0 EF80 EF80 - 000A FFFD EFEF EFBF |.���.���| 10786*7c356e86SAndroid Build Coastguard Worker 00000128 EFBE EFEF EFBF EFBF - 000A 007A 000A |����.z.| 10787*7c356e86SAndroid Build Coastguard Worker--- 10788*7c356e86SAndroid Build Coastguard Workername: integer-base-one-3Ar 10789*7c356e86SAndroid Build Coastguard Workerdescription: 10790*7c356e86SAndroid Build Coastguard Worker some sample code for hexdumping; NUL and binary safe 10791*7c356e86SAndroid Build Coastguard Workerstdin: 10792*7c356e86SAndroid Build Coastguard Worker { 10793*7c356e86SAndroid Build Coastguard Worker print 'Hello, World!\\\nこんにちは!' 10794*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 i=0x100 10795*7c356e86SAndroid Build Coastguard Worker # change that to 0xFF once we can handle embedded 10796*7c356e86SAndroid Build Coastguard Worker # NUL characters in strings / here documents 10797*7c356e86SAndroid Build Coastguard Worker while (( i++ < 0x1FF )); do 10798*7c356e86SAndroid Build Coastguard Worker print -n "\x${i#16#1}" 10799*7c356e86SAndroid Build Coastguard Worker done 10800*7c356e86SAndroid Build Coastguard Worker print '\0z' 10801*7c356e86SAndroid Build Coastguard Worker } | { 10802*7c356e86SAndroid Build Coastguard Worker # integer-base-one-3Ar 10803*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z11 pos=0 10804*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z5 hv=2147483647 10805*7c356e86SAndroid Build Coastguard Worker dasc= 10806*7c356e86SAndroid Build Coastguard Worker if read -arN -1 line; then 10807*7c356e86SAndroid Build Coastguard Worker typeset -i1 line 10808*7c356e86SAndroid Build Coastguard Worker i=0 10809*7c356e86SAndroid Build Coastguard Worker while (( i < ${#line[*]} )); do 10810*7c356e86SAndroid Build Coastguard Worker hv=${line[i++]} 10811*7c356e86SAndroid Build Coastguard Worker if (( (pos & 15) == 0 )); then 10812*7c356e86SAndroid Build Coastguard Worker (( pos )) && print -r -- "$dasc|" 10813*7c356e86SAndroid Build Coastguard Worker print -n "${pos#16#} " 10814*7c356e86SAndroid Build Coastguard Worker dasc=' |' 10815*7c356e86SAndroid Build Coastguard Worker fi 10816*7c356e86SAndroid Build Coastguard Worker print -n "${hv#16#} " 10817*7c356e86SAndroid Build Coastguard Worker if (( (hv < 32) || (hv > 126) )); then 10818*7c356e86SAndroid Build Coastguard Worker dasc=$dasc. 10819*7c356e86SAndroid Build Coastguard Worker else 10820*7c356e86SAndroid Build Coastguard Worker dasc=$dasc${line[i-1]#1#} 10821*7c356e86SAndroid Build Coastguard Worker fi 10822*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10823*7c356e86SAndroid Build Coastguard Worker done 10824*7c356e86SAndroid Build Coastguard Worker fi 10825*7c356e86SAndroid Build Coastguard Worker while (( pos & 15 )); do 10826*7c356e86SAndroid Build Coastguard Worker print -n ' ' 10827*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 15) == 7 )) && print -n -- '- ' 10828*7c356e86SAndroid Build Coastguard Worker done 10829*7c356e86SAndroid Build Coastguard Worker (( hv == 2147483647 )) || print -r -- "$dasc|" 10830*7c356e86SAndroid Build Coastguard Worker } 10831*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10832*7c356e86SAndroid Build Coastguard Worker 00000000 48 65 6C 6C 6F 2C 20 57 - 6F 72 6C 64 21 5C 0A E3 |Hello, World!\..| 10833*7c356e86SAndroid Build Coastguard Worker 00000010 81 93 E3 82 93 E3 81 AB - E3 81 A1 E3 81 AF EF BC |................| 10834*7c356e86SAndroid Build Coastguard Worker 00000020 81 0A 01 02 03 04 05 06 - 07 08 09 0A 0B 0C 0D 0E |................| 10835*7c356e86SAndroid Build Coastguard Worker 00000030 0F 10 11 12 13 14 15 16 - 17 18 19 1A 1B 1C 1D 1E |................| 10836*7c356e86SAndroid Build Coastguard Worker 00000040 1F 20 21 22 23 24 25 26 - 27 28 29 2A 2B 2C 2D 2E |. !"#$%&'()*+,-.| 10837*7c356e86SAndroid Build Coastguard Worker 00000050 2F 30 31 32 33 34 35 36 - 37 38 39 3A 3B 3C 3D 3E |/0123456789:;<=>| 10838*7c356e86SAndroid Build Coastguard Worker 00000060 3F 40 41 42 43 44 45 46 - 47 48 49 4A 4B 4C 4D 4E |?@ABCDEFGHIJKLMN| 10839*7c356e86SAndroid Build Coastguard Worker 00000070 4F 50 51 52 53 54 55 56 - 57 58 59 5A 5B 5C 5D 5E |OPQRSTUVWXYZ[\]^| 10840*7c356e86SAndroid Build Coastguard Worker 00000080 5F 60 61 62 63 64 65 66 - 67 68 69 6A 6B 6C 6D 6E |_`abcdefghijklmn| 10841*7c356e86SAndroid Build Coastguard Worker 00000090 6F 70 71 72 73 74 75 76 - 77 78 79 7A 7B 7C 7D 7E |opqrstuvwxyz{|}~| 10842*7c356e86SAndroid Build Coastguard Worker 000000A0 7F 80 81 82 83 84 85 86 - 87 88 89 8A 8B 8C 8D 8E |................| 10843*7c356e86SAndroid Build Coastguard Worker 000000B0 8F 90 91 92 93 94 95 96 - 97 98 99 9A 9B 9C 9D 9E |................| 10844*7c356e86SAndroid Build Coastguard Worker 000000C0 9F A0 A1 A2 A3 A4 A5 A6 - A7 A8 A9 AA AB AC AD AE |................| 10845*7c356e86SAndroid Build Coastguard Worker 000000D0 AF B0 B1 B2 B3 B4 B5 B6 - B7 B8 B9 BA BB BC BD BE |................| 10846*7c356e86SAndroid Build Coastguard Worker 000000E0 BF C0 C1 C2 C3 C4 C5 C6 - C7 C8 C9 CA CB CC CD CE |................| 10847*7c356e86SAndroid Build Coastguard Worker 000000F0 CF D0 D1 D2 D3 D4 D5 D6 - D7 D8 D9 DA DB DC DD DE |................| 10848*7c356e86SAndroid Build Coastguard Worker 00000100 DF E0 E1 E2 E3 E4 E5 E6 - E7 E8 E9 EA EB EC ED EE |................| 10849*7c356e86SAndroid Build Coastguard Worker 00000110 EF F0 F1 F2 F3 F4 F5 F6 - F7 F8 F9 FA FB FC FD FE |................| 10850*7c356e86SAndroid Build Coastguard Worker 00000120 FF 00 7A 0A - |..z.| 10851*7c356e86SAndroid Build Coastguard Worker--- 10852*7c356e86SAndroid Build Coastguard Workername: integer-base-one-3Wr 10853*7c356e86SAndroid Build Coastguard Workerdescription: 10854*7c356e86SAndroid Build Coastguard Worker some sample code for hexdumping UCS-2; NUL and binary safe 10855*7c356e86SAndroid Build Coastguard Workerstdin: 10856*7c356e86SAndroid Build Coastguard Worker set -U 10857*7c356e86SAndroid Build Coastguard Worker { 10858*7c356e86SAndroid Build Coastguard Worker print 'Hello, World!\\\nこんにちは!' 10859*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 i=0x100 10860*7c356e86SAndroid Build Coastguard Worker # change that to 0xFF once we can handle embedded 10861*7c356e86SAndroid Build Coastguard Worker # NUL characters in strings / here documents 10862*7c356e86SAndroid Build Coastguard Worker while (( i++ < 0x1FF )); do 10863*7c356e86SAndroid Build Coastguard Worker print -n "\u${i#16#1}" 10864*7c356e86SAndroid Build Coastguard Worker done 10865*7c356e86SAndroid Build Coastguard Worker print 10866*7c356e86SAndroid Build Coastguard Worker print \\xff # invalid utf-8 10867*7c356e86SAndroid Build Coastguard Worker print \\xc2 # invalid 2-byte 10868*7c356e86SAndroid Build Coastguard Worker print \\xef\\xbf\\xc0 # invalid 3-byte 10869*7c356e86SAndroid Build Coastguard Worker print \\xc0\\x80 # non-minimalistic 10870*7c356e86SAndroid Build Coastguard Worker print \\xe0\\x80\\x80 # non-minimalistic 10871*7c356e86SAndroid Build Coastguard Worker print '�' # end of range 10872*7c356e86SAndroid Build Coastguard Worker print '\0z' # embedded NUL 10873*7c356e86SAndroid Build Coastguard Worker } | { 10874*7c356e86SAndroid Build Coastguard Worker # integer-base-one-3Wr 10875*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z11 pos=0 10876*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 -Z7 hv=2147483647 10877*7c356e86SAndroid Build Coastguard Worker dasc= 10878*7c356e86SAndroid Build Coastguard Worker if read -arN -1 line; then 10879*7c356e86SAndroid Build Coastguard Worker typeset -i1 line 10880*7c356e86SAndroid Build Coastguard Worker i=0 10881*7c356e86SAndroid Build Coastguard Worker while (( i < ${#line[*]} )); do 10882*7c356e86SAndroid Build Coastguard Worker hv=${line[i++]} 10883*7c356e86SAndroid Build Coastguard Worker if (( (hv < 32) || \ 10884*7c356e86SAndroid Build Coastguard Worker ((hv > 126) && (hv < 160)) )); then 10885*7c356e86SAndroid Build Coastguard Worker dch=. 10886*7c356e86SAndroid Build Coastguard Worker elif (( (hv & 0xFF80) == 0xEF80 )); then 10887*7c356e86SAndroid Build Coastguard Worker dch=� 10888*7c356e86SAndroid Build Coastguard Worker else 10889*7c356e86SAndroid Build Coastguard Worker dch=${line[i-1]#1#} 10890*7c356e86SAndroid Build Coastguard Worker fi 10891*7c356e86SAndroid Build Coastguard Worker if (( (pos & 7) == 7 )); then 10892*7c356e86SAndroid Build Coastguard Worker dasc=$dasc$dch 10893*7c356e86SAndroid Build Coastguard Worker dch= 10894*7c356e86SAndroid Build Coastguard Worker elif (( (pos & 7) == 0 )); then 10895*7c356e86SAndroid Build Coastguard Worker (( pos )) && print -r -- "$dasc|" 10896*7c356e86SAndroid Build Coastguard Worker print -n "${pos#16#} " 10897*7c356e86SAndroid Build Coastguard Worker dasc=' |' 10898*7c356e86SAndroid Build Coastguard Worker fi 10899*7c356e86SAndroid Build Coastguard Worker print -n "${hv#16#} " 10900*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 7) == 3 )) && \ 10901*7c356e86SAndroid Build Coastguard Worker print -n -- '- ' 10902*7c356e86SAndroid Build Coastguard Worker dasc=$dasc$dch 10903*7c356e86SAndroid Build Coastguard Worker done 10904*7c356e86SAndroid Build Coastguard Worker fi 10905*7c356e86SAndroid Build Coastguard Worker while (( pos & 7 )); do 10906*7c356e86SAndroid Build Coastguard Worker print -n ' ' 10907*7c356e86SAndroid Build Coastguard Worker (( (pos++ & 7) == 3 )) && print -n -- '- ' 10908*7c356e86SAndroid Build Coastguard Worker done 10909*7c356e86SAndroid Build Coastguard Worker (( hv == 2147483647 )) || print -r -- "$dasc|" 10910*7c356e86SAndroid Build Coastguard Worker } 10911*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10912*7c356e86SAndroid Build Coastguard Worker 00000000 0048 0065 006C 006C - 006F 002C 0020 0057 |Hello, W| 10913*7c356e86SAndroid Build Coastguard Worker 00000008 006F 0072 006C 0064 - 0021 005C 000A 3053 |orld!\.こ| 10914*7c356e86SAndroid Build Coastguard Worker 00000010 3093 306B 3061 306F - FF01 000A 0001 0002 |んにちは!...| 10915*7c356e86SAndroid Build Coastguard Worker 00000018 0003 0004 0005 0006 - 0007 0008 0009 000A |........| 10916*7c356e86SAndroid Build Coastguard Worker 00000020 000B 000C 000D 000E - 000F 0010 0011 0012 |........| 10917*7c356e86SAndroid Build Coastguard Worker 00000028 0013 0014 0015 0016 - 0017 0018 0019 001A |........| 10918*7c356e86SAndroid Build Coastguard Worker 00000030 001B 001C 001D 001E - 001F 0020 0021 0022 |..... !"| 10919*7c356e86SAndroid Build Coastguard Worker 00000038 0023 0024 0025 0026 - 0027 0028 0029 002A |#$%&'()*| 10920*7c356e86SAndroid Build Coastguard Worker 00000040 002B 002C 002D 002E - 002F 0030 0031 0032 |+,-./012| 10921*7c356e86SAndroid Build Coastguard Worker 00000048 0033 0034 0035 0036 - 0037 0038 0039 003A |3456789:| 10922*7c356e86SAndroid Build Coastguard Worker 00000050 003B 003C 003D 003E - 003F 0040 0041 0042 |;<=>?@AB| 10923*7c356e86SAndroid Build Coastguard Worker 00000058 0043 0044 0045 0046 - 0047 0048 0049 004A |CDEFGHIJ| 10924*7c356e86SAndroid Build Coastguard Worker 00000060 004B 004C 004D 004E - 004F 0050 0051 0052 |KLMNOPQR| 10925*7c356e86SAndroid Build Coastguard Worker 00000068 0053 0054 0055 0056 - 0057 0058 0059 005A |STUVWXYZ| 10926*7c356e86SAndroid Build Coastguard Worker 00000070 005B 005C 005D 005E - 005F 0060 0061 0062 |[\]^_`ab| 10927*7c356e86SAndroid Build Coastguard Worker 00000078 0063 0064 0065 0066 - 0067 0068 0069 006A |cdefghij| 10928*7c356e86SAndroid Build Coastguard Worker 00000080 006B 006C 006D 006E - 006F 0070 0071 0072 |klmnopqr| 10929*7c356e86SAndroid Build Coastguard Worker 00000088 0073 0074 0075 0076 - 0077 0078 0079 007A |stuvwxyz| 10930*7c356e86SAndroid Build Coastguard Worker 00000090 007B 007C 007D 007E - 007F 0080 0081 0082 |{|}~....| 10931*7c356e86SAndroid Build Coastguard Worker 00000098 0083 0084 0085 0086 - 0087 0088 0089 008A |........| 10932*7c356e86SAndroid Build Coastguard Worker 000000A0 008B 008C 008D 008E - 008F 0090 0091 0092 |........| 10933*7c356e86SAndroid Build Coastguard Worker 000000A8 0093 0094 0095 0096 - 0097 0098 0099 009A |........| 10934*7c356e86SAndroid Build Coastguard Worker 000000B0 009B 009C 009D 009E - 009F 00A0 00A1 00A2 |..... ¡¢| 10935*7c356e86SAndroid Build Coastguard Worker 000000B8 00A3 00A4 00A5 00A6 - 00A7 00A8 00A9 00AA |£¤¥¦§¨©ª| 10936*7c356e86SAndroid Build Coastguard Worker 000000C0 00AB 00AC 00AD 00AE - 00AF 00B0 00B1 00B2 |«¬®¯°±²| 10937*7c356e86SAndroid Build Coastguard Worker 000000C8 00B3 00B4 00B5 00B6 - 00B7 00B8 00B9 00BA |³´µ¶·¸¹º| 10938*7c356e86SAndroid Build Coastguard Worker 000000D0 00BB 00BC 00BD 00BE - 00BF 00C0 00C1 00C2 |»¼½¾¿ÀÁÂ| 10939*7c356e86SAndroid Build Coastguard Worker 000000D8 00C3 00C4 00C5 00C6 - 00C7 00C8 00C9 00CA |ÃÄÅÆÇÈÉÊ| 10940*7c356e86SAndroid Build Coastguard Worker 000000E0 00CB 00CC 00CD 00CE - 00CF 00D0 00D1 00D2 |ËÌÍÎÏÐÑÒ| 10941*7c356e86SAndroid Build Coastguard Worker 000000E8 00D3 00D4 00D5 00D6 - 00D7 00D8 00D9 00DA |ÓÔÕÖרÙÚ| 10942*7c356e86SAndroid Build Coastguard Worker 000000F0 00DB 00DC 00DD 00DE - 00DF 00E0 00E1 00E2 |ÛÜÝÞßàáâ| 10943*7c356e86SAndroid Build Coastguard Worker 000000F8 00E3 00E4 00E5 00E6 - 00E7 00E8 00E9 00EA |ãäåæçèéê| 10944*7c356e86SAndroid Build Coastguard Worker 00000100 00EB 00EC 00ED 00EE - 00EF 00F0 00F1 00F2 |ëìíîïðñò| 10945*7c356e86SAndroid Build Coastguard Worker 00000108 00F3 00F4 00F5 00F6 - 00F7 00F8 00F9 00FA |óôõö÷øùú| 10946*7c356e86SAndroid Build Coastguard Worker 00000110 00FB 00FC 00FD 00FE - 00FF 000A EFFF 000A |ûüýþÿ.�.| 10947*7c356e86SAndroid Build Coastguard Worker 00000118 EFC2 000A EFEF EFBF - EFC0 000A EFC0 EF80 |�.���.��| 10948*7c356e86SAndroid Build Coastguard Worker 00000120 000A EFE0 EF80 EF80 - 000A FFFD EFEF EFBF |.���.���| 10949*7c356e86SAndroid Build Coastguard Worker 00000128 EFBE EFEF EFBF EFBF - 000A 0000 007A 000A |����..z.| 10950*7c356e86SAndroid Build Coastguard Worker--- 10951*7c356e86SAndroid Build Coastguard Workername: integer-base-one-4 10952*7c356e86SAndroid Build Coastguard Workerdescription: 10953*7c356e86SAndroid Build Coastguard Worker Check if ksh93-style base-one integers work 10954*7c356e86SAndroid Build Coastguard Workercategory: !smksh 10955*7c356e86SAndroid Build Coastguard Workerstdin: 10956*7c356e86SAndroid Build Coastguard Worker set -U 10957*7c356e86SAndroid Build Coastguard Worker echo 1 $(('a')) 10958*7c356e86SAndroid Build Coastguard Worker (echo 2f $(('aa'))) 2>&1 | sed "s/^[^']*'/2p '/" 10959*7c356e86SAndroid Build Coastguard Worker echo 3 $(('…')) 10960*7c356e86SAndroid Build Coastguard Worker x="'a'" 10961*7c356e86SAndroid Build Coastguard Worker echo "4 <$x>" 10962*7c356e86SAndroid Build Coastguard Worker echo 5 $(($x)) 10963*7c356e86SAndroid Build Coastguard Worker echo 6 $((x)) 10964*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10965*7c356e86SAndroid Build Coastguard Worker 1 97 10966*7c356e86SAndroid Build Coastguard Worker 2p 'aa': multi-character character constant 10967*7c356e86SAndroid Build Coastguard Worker 3 8230 10968*7c356e86SAndroid Build Coastguard Worker 4 <'a'> 10969*7c356e86SAndroid Build Coastguard Worker 5 97 10970*7c356e86SAndroid Build Coastguard Worker 6 97 10971*7c356e86SAndroid Build Coastguard Worker--- 10972*7c356e86SAndroid Build Coastguard Workername: integer-base-one-5A 10973*7c356e86SAndroid Build Coastguard Workerdescription: 10974*7c356e86SAndroid Build Coastguard Worker Check to see that we’re NUL and UCS safe 10975*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes 10976*7c356e86SAndroid Build Coastguard Workerstdin: 10977*7c356e86SAndroid Build Coastguard Worker set +U 10978*7c356e86SAndroid Build Coastguard Worker print 'a\0b\xfdz' >x 10979*7c356e86SAndroid Build Coastguard Worker read -a y <x 10980*7c356e86SAndroid Build Coastguard Worker set -U 10981*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 y 10982*7c356e86SAndroid Build Coastguard Worker print ${y[*]} . 10983*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10984*7c356e86SAndroid Build Coastguard Worker 16#61 16#0 16#62 16#FD 16#7A . 10985*7c356e86SAndroid Build Coastguard Worker--- 10986*7c356e86SAndroid Build Coastguard Workername: integer-base-one-5E 10987*7c356e86SAndroid Build Coastguard Workerdescription: 10988*7c356e86SAndroid Build Coastguard Worker Check to see that we’re NUL and UCS safe 10989*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no 10990*7c356e86SAndroid Build Coastguard Workerstdin: 10991*7c356e86SAndroid Build Coastguard Worker set +U 10992*7c356e86SAndroid Build Coastguard Worker print 'a\0b\xfdz' >x 10993*7c356e86SAndroid Build Coastguard Worker read -a y <x 10994*7c356e86SAndroid Build Coastguard Worker set -U 10995*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 y 10996*7c356e86SAndroid Build Coastguard Worker print ${y[*]} . 10997*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 10998*7c356e86SAndroid Build Coastguard Worker 16#81 16#0 16#82 16#FD 16#A9 . 10999*7c356e86SAndroid Build Coastguard Worker--- 11000*7c356e86SAndroid Build Coastguard Workername: integer-base-one-5W 11001*7c356e86SAndroid Build Coastguard Workerdescription: 11002*7c356e86SAndroid Build Coastguard Worker Check to see that we’re NUL and UCS safe 11003*7c356e86SAndroid Build Coastguard Workerstdin: 11004*7c356e86SAndroid Build Coastguard Worker set -U 11005*7c356e86SAndroid Build Coastguard Worker print 'a\0b€c' >x 11006*7c356e86SAndroid Build Coastguard Worker read -a y <x 11007*7c356e86SAndroid Build Coastguard Worker set +U 11008*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 y 11009*7c356e86SAndroid Build Coastguard Worker print ${y[*]} . 11010*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11011*7c356e86SAndroid Build Coastguard Worker 16#61 16#0 16#62 16#20AC 16#63 . 11012*7c356e86SAndroid Build Coastguard Worker--- 11013*7c356e86SAndroid Build Coastguard Workername: ulimit-1 11014*7c356e86SAndroid Build Coastguard Workerdescription: 11015*7c356e86SAndroid Build Coastguard Worker Check that ulimit as used in dot.mksh works or is stubbed 11016*7c356e86SAndroid Build Coastguard Workerstdin: 11017*7c356e86SAndroid Build Coastguard Worker ulimit -c 0 11018*7c356e86SAndroid Build Coastguard Worker--- 11019*7c356e86SAndroid Build Coastguard Workername: ulimit-2 11020*7c356e86SAndroid Build Coastguard Workerdescription: 11021*7c356e86SAndroid Build Coastguard Worker Check if we can use a specific syntax idiom for ulimit 11022*7c356e86SAndroid Build Coastguard Worker XXX Haiku works, but only for -n and -V 11023*7c356e86SAndroid Build Coastguard Workercategory: !os:haiku,!os:syllable 11024*7c356e86SAndroid Build Coastguard Workerstdin: 11025*7c356e86SAndroid Build Coastguard Worker if ! x=$(ulimit -d) || [[ $x = unknown ]]; then 11026*7c356e86SAndroid Build Coastguard Worker #echo expected to fail on this OS 11027*7c356e86SAndroid Build Coastguard Worker echo okay 11028*7c356e86SAndroid Build Coastguard Worker else 11029*7c356e86SAndroid Build Coastguard Worker ulimit -dS $x && echo okay 11030*7c356e86SAndroid Build Coastguard Worker fi 11031*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11032*7c356e86SAndroid Build Coastguard Worker okay 11033*7c356e86SAndroid Build Coastguard Worker--- 11034*7c356e86SAndroid Build Coastguard Workername: ulimit-3 11035*7c356e86SAndroid Build Coastguard Workerdescription: 11036*7c356e86SAndroid Build Coastguard Worker Check that there are no duplicate limits (if this fails, 11037*7c356e86SAndroid Build Coastguard Worker immediately contact with system information the developers) 11038*7c356e86SAndroid Build Coastguard Workerstdin: 11039*7c356e86SAndroid Build Coastguard Worker [[ -z $(set | grep ^opt) ]]; mis=$? 11040*7c356e86SAndroid Build Coastguard Worker set | grep ^opt | sed 's/^/unexpectedly set in environment: /' 11041*7c356e86SAndroid Build Coastguard Worker opta='<used for showing all limits>' 11042*7c356e86SAndroid Build Coastguard Worker optH='<used to set hard limits>' 11043*7c356e86SAndroid Build Coastguard Worker optS='<used to set soft limits>' 11044*7c356e86SAndroid Build Coastguard Worker ulimit -a >tmpf 11045*7c356e86SAndroid Build Coastguard Worker set -o noglob 11046*7c356e86SAndroid Build Coastguard Worker while IFS= read -r line; do 11047*7c356e86SAndroid Build Coastguard Worker x=${line:1:1} 11048*7c356e86SAndroid Build Coastguard Worker if [[ -z $x || ${#x}/${%x} != 1/1 ]]; then 11049*7c356e86SAndroid Build Coastguard Worker print -r -- "weird line: $line" 11050*7c356e86SAndroid Build Coastguard Worker (( mis |= 1 )) 11051*7c356e86SAndroid Build Coastguard Worker continue 11052*7c356e86SAndroid Build Coastguard Worker fi 11053*7c356e86SAndroid Build Coastguard Worker set -- $line 11054*7c356e86SAndroid Build Coastguard Worker nameref v=opt$x 11055*7c356e86SAndroid Build Coastguard Worker if [[ -n $v ]]; then 11056*7c356e86SAndroid Build Coastguard Worker print -r -- "duplicate -$x \"$2\" already seen as \"$v\"" 11057*7c356e86SAndroid Build Coastguard Worker (( mis |= 2 )) 11058*7c356e86SAndroid Build Coastguard Worker fi 11059*7c356e86SAndroid Build Coastguard Worker v=$2 11060*7c356e86SAndroid Build Coastguard Worker done <tmpf 11061*7c356e86SAndroid Build Coastguard Worker if (( mis & 2 )); then 11062*7c356e86SAndroid Build Coastguard Worker echo failed 11063*7c356e86SAndroid Build Coastguard Worker elif (( mis & 1 )); then 11064*7c356e86SAndroid Build Coastguard Worker echo inconclusive 11065*7c356e86SAndroid Build Coastguard Worker else 11066*7c356e86SAndroid Build Coastguard Worker echo done 11067*7c356e86SAndroid Build Coastguard Worker fi 11068*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11069*7c356e86SAndroid Build Coastguard Worker done 11070*7c356e86SAndroid Build Coastguard Worker--- 11071*7c356e86SAndroid Build Coastguard Workername: redir-1 11072*7c356e86SAndroid Build Coastguard Workerdescription: 11073*7c356e86SAndroid Build Coastguard Worker Check some of the most basic invariants of I/O redirection 11074*7c356e86SAndroid Build Coastguard Workerstdin: 11075*7c356e86SAndroid Build Coastguard Worker i=0 11076*7c356e86SAndroid Build Coastguard Worker function d { 11077*7c356e86SAndroid Build Coastguard Worker print o$i. 11078*7c356e86SAndroid Build Coastguard Worker print -u2 e$((i++)). 11079*7c356e86SAndroid Build Coastguard Worker } 11080*7c356e86SAndroid Build Coastguard Worker d >a 2>b 11081*7c356e86SAndroid Build Coastguard Worker echo =1= 11082*7c356e86SAndroid Build Coastguard Worker cat a 11083*7c356e86SAndroid Build Coastguard Worker echo =2= 11084*7c356e86SAndroid Build Coastguard Worker cat b 11085*7c356e86SAndroid Build Coastguard Worker echo =3= 11086*7c356e86SAndroid Build Coastguard Worker d 2>&1 >c 11087*7c356e86SAndroid Build Coastguard Worker echo =4= 11088*7c356e86SAndroid Build Coastguard Worker cat c 11089*7c356e86SAndroid Build Coastguard Worker echo =5= 11090*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11091*7c356e86SAndroid Build Coastguard Worker =1= 11092*7c356e86SAndroid Build Coastguard Worker o0. 11093*7c356e86SAndroid Build Coastguard Worker =2= 11094*7c356e86SAndroid Build Coastguard Worker e0. 11095*7c356e86SAndroid Build Coastguard Worker =3= 11096*7c356e86SAndroid Build Coastguard Worker e1. 11097*7c356e86SAndroid Build Coastguard Worker =4= 11098*7c356e86SAndroid Build Coastguard Worker o1. 11099*7c356e86SAndroid Build Coastguard Worker =5= 11100*7c356e86SAndroid Build Coastguard Worker--- 11101*7c356e86SAndroid Build Coastguard Workername: bashiop-1 11102*7c356e86SAndroid Build Coastguard Workerdescription: 11103*7c356e86SAndroid Build Coastguard Worker Check if GNU bash-like I/O redirection works 11104*7c356e86SAndroid Build Coastguard Worker Part 1: this is also supported by GNU bash 11105*7c356e86SAndroid Build Coastguard Workerstdin: 11106*7c356e86SAndroid Build Coastguard Worker exec 3>&1 11107*7c356e86SAndroid Build Coastguard Worker function threeout { 11108*7c356e86SAndroid Build Coastguard Worker echo ras 11109*7c356e86SAndroid Build Coastguard Worker echo dwa >&2 11110*7c356e86SAndroid Build Coastguard Worker echo tri >&3 11111*7c356e86SAndroid Build Coastguard Worker } 11112*7c356e86SAndroid Build Coastguard Worker threeout &>foo 11113*7c356e86SAndroid Build Coastguard Worker echo === 11114*7c356e86SAndroid Build Coastguard Worker cat foo 11115*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11116*7c356e86SAndroid Build Coastguard Worker tri 11117*7c356e86SAndroid Build Coastguard Worker === 11118*7c356e86SAndroid Build Coastguard Worker ras 11119*7c356e86SAndroid Build Coastguard Worker dwa 11120*7c356e86SAndroid Build Coastguard Worker--- 11121*7c356e86SAndroid Build Coastguard Workername: bashiop-2a 11122*7c356e86SAndroid Build Coastguard Workerdescription: 11123*7c356e86SAndroid Build Coastguard Worker Check if GNU bash-like I/O redirection works 11124*7c356e86SAndroid Build Coastguard Worker Part 2: this is *not* supported by GNU bash 11125*7c356e86SAndroid Build Coastguard Workerstdin: 11126*7c356e86SAndroid Build Coastguard Worker exec 3>&1 11127*7c356e86SAndroid Build Coastguard Worker function threeout { 11128*7c356e86SAndroid Build Coastguard Worker echo ras 11129*7c356e86SAndroid Build Coastguard Worker echo dwa >&2 11130*7c356e86SAndroid Build Coastguard Worker echo tri >&3 11131*7c356e86SAndroid Build Coastguard Worker } 11132*7c356e86SAndroid Build Coastguard Worker threeout 3&>foo 11133*7c356e86SAndroid Build Coastguard Worker echo === 11134*7c356e86SAndroid Build Coastguard Worker cat foo 11135*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11136*7c356e86SAndroid Build Coastguard Worker ras 11137*7c356e86SAndroid Build Coastguard Worker === 11138*7c356e86SAndroid Build Coastguard Worker dwa 11139*7c356e86SAndroid Build Coastguard Worker tri 11140*7c356e86SAndroid Build Coastguard Worker--- 11141*7c356e86SAndroid Build Coastguard Workername: bashiop-2b 11142*7c356e86SAndroid Build Coastguard Workerdescription: 11143*7c356e86SAndroid Build Coastguard Worker Check if GNU bash-like I/O redirection works 11144*7c356e86SAndroid Build Coastguard Worker Part 2: this is *not* supported by GNU bash 11145*7c356e86SAndroid Build Coastguard Workerstdin: 11146*7c356e86SAndroid Build Coastguard Worker exec 3>&1 11147*7c356e86SAndroid Build Coastguard Worker function threeout { 11148*7c356e86SAndroid Build Coastguard Worker echo ras 11149*7c356e86SAndroid Build Coastguard Worker echo dwa >&2 11150*7c356e86SAndroid Build Coastguard Worker echo tri >&3 11151*7c356e86SAndroid Build Coastguard Worker } 11152*7c356e86SAndroid Build Coastguard Worker threeout 3>foo &>&3 11153*7c356e86SAndroid Build Coastguard Worker echo === 11154*7c356e86SAndroid Build Coastguard Worker cat foo 11155*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11156*7c356e86SAndroid Build Coastguard Worker === 11157*7c356e86SAndroid Build Coastguard Worker ras 11158*7c356e86SAndroid Build Coastguard Worker dwa 11159*7c356e86SAndroid Build Coastguard Worker tri 11160*7c356e86SAndroid Build Coastguard Worker--- 11161*7c356e86SAndroid Build Coastguard Workername: bashiop-2c 11162*7c356e86SAndroid Build Coastguard Workerdescription: 11163*7c356e86SAndroid Build Coastguard Worker Check if GNU bash-like I/O redirection works 11164*7c356e86SAndroid Build Coastguard Worker Part 2: this is supported by GNU bash 4 only 11165*7c356e86SAndroid Build Coastguard Workerstdin: 11166*7c356e86SAndroid Build Coastguard Worker echo mir >foo 11167*7c356e86SAndroid Build Coastguard Worker set -o noclobber 11168*7c356e86SAndroid Build Coastguard Worker exec 3>&1 11169*7c356e86SAndroid Build Coastguard Worker function threeout { 11170*7c356e86SAndroid Build Coastguard Worker echo ras 11171*7c356e86SAndroid Build Coastguard Worker echo dwa >&2 11172*7c356e86SAndroid Build Coastguard Worker echo tri >&3 11173*7c356e86SAndroid Build Coastguard Worker } 11174*7c356e86SAndroid Build Coastguard Worker threeout &>>foo 11175*7c356e86SAndroid Build Coastguard Worker echo === 11176*7c356e86SAndroid Build Coastguard Worker cat foo 11177*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11178*7c356e86SAndroid Build Coastguard Worker tri 11179*7c356e86SAndroid Build Coastguard Worker === 11180*7c356e86SAndroid Build Coastguard Worker mir 11181*7c356e86SAndroid Build Coastguard Worker ras 11182*7c356e86SAndroid Build Coastguard Worker dwa 11183*7c356e86SAndroid Build Coastguard Worker--- 11184*7c356e86SAndroid Build Coastguard Workername: bashiop-3a 11185*7c356e86SAndroid Build Coastguard Workerdescription: 11186*7c356e86SAndroid Build Coastguard Worker Check if GNU bash-like I/O redirection fails correctly 11187*7c356e86SAndroid Build Coastguard Worker Part 1: this is also supported by GNU bash 11188*7c356e86SAndroid Build Coastguard Workerstdin: 11189*7c356e86SAndroid Build Coastguard Worker echo mir >foo 11190*7c356e86SAndroid Build Coastguard Worker set -o noclobber 11191*7c356e86SAndroid Build Coastguard Worker exec 3>&1 11192*7c356e86SAndroid Build Coastguard Worker function threeout { 11193*7c356e86SAndroid Build Coastguard Worker echo ras 11194*7c356e86SAndroid Build Coastguard Worker echo dwa >&2 11195*7c356e86SAndroid Build Coastguard Worker echo tri >&3 11196*7c356e86SAndroid Build Coastguard Worker } 11197*7c356e86SAndroid Build Coastguard Worker threeout &>foo 11198*7c356e86SAndroid Build Coastguard Worker echo === 11199*7c356e86SAndroid Build Coastguard Worker cat foo 11200*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11201*7c356e86SAndroid Build Coastguard Worker === 11202*7c356e86SAndroid Build Coastguard Worker mir 11203*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*: can't (create|overwrite) .*/ 11204*7c356e86SAndroid Build Coastguard Worker--- 11205*7c356e86SAndroid Build Coastguard Workername: bashiop-3b 11206*7c356e86SAndroid Build Coastguard Workerdescription: 11207*7c356e86SAndroid Build Coastguard Worker Check if GNU bash-like I/O redirection fails correctly 11208*7c356e86SAndroid Build Coastguard Worker Part 2: this is *not* supported by GNU bash 11209*7c356e86SAndroid Build Coastguard Workerstdin: 11210*7c356e86SAndroid Build Coastguard Worker echo mir >foo 11211*7c356e86SAndroid Build Coastguard Worker set -o noclobber 11212*7c356e86SAndroid Build Coastguard Worker exec 3>&1 11213*7c356e86SAndroid Build Coastguard Worker function threeout { 11214*7c356e86SAndroid Build Coastguard Worker echo ras 11215*7c356e86SAndroid Build Coastguard Worker echo dwa >&2 11216*7c356e86SAndroid Build Coastguard Worker echo tri >&3 11217*7c356e86SAndroid Build Coastguard Worker } 11218*7c356e86SAndroid Build Coastguard Worker threeout &>|foo 11219*7c356e86SAndroid Build Coastguard Worker echo === 11220*7c356e86SAndroid Build Coastguard Worker cat foo 11221*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11222*7c356e86SAndroid Build Coastguard Worker tri 11223*7c356e86SAndroid Build Coastguard Worker === 11224*7c356e86SAndroid Build Coastguard Worker ras 11225*7c356e86SAndroid Build Coastguard Worker dwa 11226*7c356e86SAndroid Build Coastguard Worker--- 11227*7c356e86SAndroid Build Coastguard Workername: bashiop-4 11228*7c356e86SAndroid Build Coastguard Workerdescription: 11229*7c356e86SAndroid Build Coastguard Worker Check if GNU bash-like I/O redirection works 11230*7c356e86SAndroid Build Coastguard Worker Part 4: this is also supported by GNU bash, 11231*7c356e86SAndroid Build Coastguard Worker but failed in some mksh versions 11232*7c356e86SAndroid Build Coastguard Workerstdin: 11233*7c356e86SAndroid Build Coastguard Worker exec 3>&1 11234*7c356e86SAndroid Build Coastguard Worker function threeout { 11235*7c356e86SAndroid Build Coastguard Worker echo ras 11236*7c356e86SAndroid Build Coastguard Worker echo dwa >&2 11237*7c356e86SAndroid Build Coastguard Worker echo tri >&3 11238*7c356e86SAndroid Build Coastguard Worker } 11239*7c356e86SAndroid Build Coastguard Worker function blubb { 11240*7c356e86SAndroid Build Coastguard Worker [[ -e bar ]] && threeout "$bf" &>foo 11241*7c356e86SAndroid Build Coastguard Worker } 11242*7c356e86SAndroid Build Coastguard Worker blubb 11243*7c356e86SAndroid Build Coastguard Worker echo -n >bar 11244*7c356e86SAndroid Build Coastguard Worker blubb 11245*7c356e86SAndroid Build Coastguard Worker echo === 11246*7c356e86SAndroid Build Coastguard Worker cat foo 11247*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11248*7c356e86SAndroid Build Coastguard Worker tri 11249*7c356e86SAndroid Build Coastguard Worker === 11250*7c356e86SAndroid Build Coastguard Worker ras 11251*7c356e86SAndroid Build Coastguard Worker dwa 11252*7c356e86SAndroid Build Coastguard Worker--- 11253*7c356e86SAndroid Build Coastguard Workername: bashiop-5 11254*7c356e86SAndroid Build Coastguard Workerdescription: 11255*7c356e86SAndroid Build Coastguard Worker Check if GNU bash-like I/O redirection is only supported 11256*7c356e86SAndroid Build Coastguard Worker in !POSIX !sh mode as it breaks existing scripts' syntax 11257*7c356e86SAndroid Build Coastguard Workerstdin: 11258*7c356e86SAndroid Build Coastguard Worker :>x; echo 1 "$("$__progname" -c 'echo foo>/dev/null&>x echo bar')" = "$(<x)" . 11259*7c356e86SAndroid Build Coastguard Worker :>x; echo 2 "$("$__progname" -o posix -c 'echo foo>/dev/null&>x echo bar')" = "$(<x)" . 11260*7c356e86SAndroid Build Coastguard Worker :>x; echo 3 "$("$__progname" -o sh -c 'echo foo>/dev/null&>x echo bar')" = "$(<x)" . 11261*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11262*7c356e86SAndroid Build Coastguard Worker 1 = foo echo bar . 11263*7c356e86SAndroid Build Coastguard Worker 2 = bar . 11264*7c356e86SAndroid Build Coastguard Worker 3 = bar . 11265*7c356e86SAndroid Build Coastguard Worker--- 11266*7c356e86SAndroid Build Coastguard Workername: oksh-eval 11267*7c356e86SAndroid Build Coastguard Workerdescription: 11268*7c356e86SAndroid Build Coastguard Worker Check expansions. 11269*7c356e86SAndroid Build Coastguard Workerstdin: 11270*7c356e86SAndroid Build Coastguard Worker a= 11271*7c356e86SAndroid Build Coastguard Worker for n in ${a#*=}; do echo 1hu ${n} .; done 11272*7c356e86SAndroid Build Coastguard Worker for n in "${a#*=}"; do echo 1hq ${n} .; done 11273*7c356e86SAndroid Build Coastguard Worker for n in ${a##*=}; do echo 2hu ${n} .; done 11274*7c356e86SAndroid Build Coastguard Worker for n in "${a##*=}"; do echo 2hq ${n} .; done 11275*7c356e86SAndroid Build Coastguard Worker for n in ${a%=*}; do echo 1pu ${n} .; done 11276*7c356e86SAndroid Build Coastguard Worker for n in "${a%=*}"; do echo 1pq ${n} .; done 11277*7c356e86SAndroid Build Coastguard Worker for n in ${a%%=*}; do echo 2pu ${n} .; done 11278*7c356e86SAndroid Build Coastguard Worker for n in "${a%%=*}"; do echo 2pq ${n} .; done 11279*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11280*7c356e86SAndroid Build Coastguard Worker 1hq . 11281*7c356e86SAndroid Build Coastguard Worker 2hq . 11282*7c356e86SAndroid Build Coastguard Worker 1pq . 11283*7c356e86SAndroid Build Coastguard Worker 2pq . 11284*7c356e86SAndroid Build Coastguard Worker--- 11285*7c356e86SAndroid Build Coastguard Workername: oksh-and-list-error-1 11286*7c356e86SAndroid Build Coastguard Workerdescription: 11287*7c356e86SAndroid Build Coastguard Worker Test exit status of rightmost element in 2 element && list in -e mode 11288*7c356e86SAndroid Build Coastguard Workerstdin: 11289*7c356e86SAndroid Build Coastguard Worker true && false 11290*7c356e86SAndroid Build Coastguard Worker echo "should not print" 11291*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11292*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 11293*7c356e86SAndroid Build Coastguard Worker--- 11294*7c356e86SAndroid Build Coastguard Workername: oksh-and-list-error-2 11295*7c356e86SAndroid Build Coastguard Workerdescription: 11296*7c356e86SAndroid Build Coastguard Worker Test exit status of rightmost element in 3 element && list in -e mode 11297*7c356e86SAndroid Build Coastguard Workerstdin: 11298*7c356e86SAndroid Build Coastguard Worker true && true && false 11299*7c356e86SAndroid Build Coastguard Worker echo "should not print" 11300*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11301*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 11302*7c356e86SAndroid Build Coastguard Worker--- 11303*7c356e86SAndroid Build Coastguard Workername: oksh-or-list-error-1 11304*7c356e86SAndroid Build Coastguard Workerdescription: 11305*7c356e86SAndroid Build Coastguard Worker Test exit status of || list in -e mode 11306*7c356e86SAndroid Build Coastguard Workerstdin: 11307*7c356e86SAndroid Build Coastguard Worker false || false 11308*7c356e86SAndroid Build Coastguard Worker echo "should not print" 11309*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11310*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 11311*7c356e86SAndroid Build Coastguard Worker--- 11312*7c356e86SAndroid Build Coastguard Workername: oksh-longline-crash 11313*7c356e86SAndroid Build Coastguard Workerdescription: 11314*7c356e86SAndroid Build Coastguard Worker This used to cause a core dump 11315*7c356e86SAndroid Build Coastguard Workerstdin: 11316*7c356e86SAndroid Build Coastguard Worker ulimit -c 0 11317*7c356e86SAndroid Build Coastguard Worker deplibs="-lz -lpng /usr/local/lib/libjpeg.la -ltiff -lm -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libglib.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgtk.la -ltiff -ljpeg -lz -lpng -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk_pixbuf.la -lz -lpng /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libglib.la -lm -lm /usr/local/lib/libaudiofile.la -lm -lm -laudiofile -L/usr/local/lib /usr/local/lib/libesd.la -lm -lz -L/usr/local/lib /usr/local/lib/libgnomesupport.la -lm -lz -lm -lglib -L/usr/local/lib /usr/local/lib/libgnome.la -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgtk.la -lICE -lSM -lz -lpng /usr/local/lib/libungif.la /usr/local/lib/libjpeg.la -ltiff -lm -lz -lpng /usr/local/lib/libungif.la -lz /usr/local/lib/libjpeg.la -ltiff -L/usr/local/lib -L/usr/X11R6/lib /usr/local/lib/libgdk_imlib.la -lm -L/usr/local/lib /usr/local/lib/libart_lgpl.la -lm -lz -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lICE -lSM -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -L/usr/X11R6/lib -lm -lz -lpng -lungif -lz -ljpeg -ltiff -ljpeg -lgdk_imlib -lglib -lm -laudiofile -lm -laudiofile -lesd -L/usr/local/lib /usr/local/lib/libgnomeui.la -lz -lz /usr/local/lib/libxml.la -lz -lz -lz /usr/local/lib/libxml.la -lm -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libglib.la /usr/local/lib/libgmodule.la -lintl -lglib -lgmodule /usr/local/lib/libgdk.la /usr/local/lib/libgtk.la -L/usr/X11R6/lib -L/usr/local/lib /usr/local/lib/libglade.la -lz -lz -lz /usr/local/lib/libxml.la /usr/local/lib/libglib.la -lm -lm /usr/local/lib/libaudiofile.la -lm -lm -laudiofile /usr/local/lib/libesd.la -lm -lz /usr/local/lib/libgnomesupport.la -lm -lz -lm -lglib /usr/local/lib/libgnome.la -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -lglib -lgmodule /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -lglib -lgmodule /usr/local/lib/libgtk.la -lICE -lSM -lz -lpng /usr/local/lib/libungif.la /usr/local/lib/libjpeg.la -ltiff -lm -lz -lz /usr/local/lib/libgdk_imlib.la /usr/local/lib/libart_lgpl.la -lm -lz -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lm -lz -lungif -lz -ljpeg -ljpeg -lgdk_imlib -lglib -lm -laudiofile -lm -laudiofile -lesd /usr/local/lib/libgnomeui.la -L/usr/X11R6/lib -L/usr/local/lib /usr/local/lib/libglade-gnome.la /usr/local/lib/libglib.la -lm -lm /usr/local/lib/libaudiofile.la -lm -lm -laudiofile -L/usr/local/lib /usr/local/lib/libesd.la -lm -lz -L/usr/local/lib /usr/local/lib/libgnomesupport.la -lm -lz -lm -lglib -L/usr/local/lib /usr/local/lib/libgnome.la -lX11 -lXext /usr/local/lib/libiconv.la -L/usr/local/lib -L/usr/ports/devel/gettext/w-gettext-0.10.40/gettext-0.10.40/intl/.libs /usr/local/lib/libintl.la /usr/local/lib/libgmodule.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgdk.la -lintl -lm -lX11 -lXext -L/usr/X11R6/lib -lglib -lgmodule -L/usr/local/lib /usr/local/lib/libgtk.la -lICE -lSM -lz -lpng /usr/local/lib/libungif.la /usr/local/lib/libjpeg.la -ltiff -lm -lz -lpng /usr/local/lib/libungif.la -lz /usr/local/lib/libjpeg.la -ltiff -L/usr/local/lib -L/usr/X11R6/lib /usr/local/lib/libgdk_imlib.la -lm -L/usr/local/lib /usr/local/lib/libart_lgpl.la -lm -lz -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -lICE -lSM -lm -lX11 -lXext -lintl -lglib -lgmodule -lgdk -lgtk -L/usr/X11R6/lib -lm -lz -lpng -lungif -lz -ljpeg -ltiff -ljpeg -lgdk_imlib -lglib -lm -laudiofile -lm -laudiofile -lesd -L/usr/local/lib /usr/local/lib/libgnomeui.la -L/usr/X11R6/lib -L/usr/local/lib" 11318*7c356e86SAndroid Build Coastguard Worker specialdeplibs="-lgnomeui -lart_lgpl -lgdk_imlib -ltiff -ljpeg -lungif -lpng -lz -lSM -lICE -lgtk -lgdk -lgmodule -lintl -lXext -lX11 -lgnome -lgnomesupport -lesd -laudiofile -lm -lglib" 11319*7c356e86SAndroid Build Coastguard Worker for deplib in $deplibs; do 11320*7c356e86SAndroid Build Coastguard Worker case $deplib in 11321*7c356e86SAndroid Build Coastguard Worker -L*) 11322*7c356e86SAndroid Build Coastguard Worker new_libs="$deplib $new_libs" 11323*7c356e86SAndroid Build Coastguard Worker ;; 11324*7c356e86SAndroid Build Coastguard Worker *) 11325*7c356e86SAndroid Build Coastguard Worker case " $specialdeplibs " in 11326*7c356e86SAndroid Build Coastguard Worker *" $deplib "*) 11327*7c356e86SAndroid Build Coastguard Worker new_libs="$deplib $new_libs";; 11328*7c356e86SAndroid Build Coastguard Worker esac 11329*7c356e86SAndroid Build Coastguard Worker ;; 11330*7c356e86SAndroid Build Coastguard Worker esac 11331*7c356e86SAndroid Build Coastguard Worker done 11332*7c356e86SAndroid Build Coastguard Worker--- 11333*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-1 11334*7c356e86SAndroid Build Coastguard Workerdescription: 11335*7c356e86SAndroid Build Coastguard Worker The -e flag should be ignored when executing a compound list 11336*7c356e86SAndroid Build Coastguard Worker followed by an if statement. 11337*7c356e86SAndroid Build Coastguard Workerstdin: 11338*7c356e86SAndroid Build Coastguard Worker if true; then false && false; fi 11339*7c356e86SAndroid Build Coastguard Worker true 11340*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11341*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0 11342*7c356e86SAndroid Build Coastguard Worker--- 11343*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-2 11344*7c356e86SAndroid Build Coastguard Workerdescription: 11345*7c356e86SAndroid Build Coastguard Worker The -e flag should be ignored when executing a compound list 11346*7c356e86SAndroid Build Coastguard Worker followed by an if statement. 11347*7c356e86SAndroid Build Coastguard Workerstdin: 11348*7c356e86SAndroid Build Coastguard Worker if true; then if true; then false && false; fi; fi 11349*7c356e86SAndroid Build Coastguard Worker true 11350*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11351*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0 11352*7c356e86SAndroid Build Coastguard Worker--- 11353*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-3 11354*7c356e86SAndroid Build Coastguard Workerdescription: 11355*7c356e86SAndroid Build Coastguard Worker The -e flag should be ignored when executing a compound list 11356*7c356e86SAndroid Build Coastguard Worker followed by an elif statement. 11357*7c356e86SAndroid Build Coastguard Workerstdin: 11358*7c356e86SAndroid Build Coastguard Worker if true; then :; elif true; then false && false; fi 11359*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11360*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0 11361*7c356e86SAndroid Build Coastguard Worker--- 11362*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-4 11363*7c356e86SAndroid Build Coastguard Workerdescription: 11364*7c356e86SAndroid Build Coastguard Worker The -e flag should be ignored when executing a pipeline 11365*7c356e86SAndroid Build Coastguard Worker beginning with '!' 11366*7c356e86SAndroid Build Coastguard Workerstdin: 11367*7c356e86SAndroid Build Coastguard Worker for i in 1 2 3 11368*7c356e86SAndroid Build Coastguard Worker do 11369*7c356e86SAndroid Build Coastguard Worker false && false 11370*7c356e86SAndroid Build Coastguard Worker true || false 11371*7c356e86SAndroid Build Coastguard Worker done 11372*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11373*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0 11374*7c356e86SAndroid Build Coastguard Worker--- 11375*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-5 11376*7c356e86SAndroid Build Coastguard Workerdescription: 11377*7c356e86SAndroid Build Coastguard Worker The -e flag should be ignored when executing a pipeline 11378*7c356e86SAndroid Build Coastguard Worker beginning with '!' 11379*7c356e86SAndroid Build Coastguard Workerstdin: 11380*7c356e86SAndroid Build Coastguard Worker ! true | false 11381*7c356e86SAndroid Build Coastguard Worker true 11382*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11383*7c356e86SAndroid Build Coastguard Workerexpected-exit: e == 0 11384*7c356e86SAndroid Build Coastguard Worker--- 11385*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-6 11386*7c356e86SAndroid Build Coastguard Workerdescription: 11387*7c356e86SAndroid Build Coastguard Worker When trapping ERR and EXIT, both traps should run in -e mode 11388*7c356e86SAndroid Build Coastguard Worker when an error occurs. 11389*7c356e86SAndroid Build Coastguard Workerstdin: 11390*7c356e86SAndroid Build Coastguard Worker trap 'echo EXIT' EXIT 11391*7c356e86SAndroid Build Coastguard Worker trap 'echo ERR' ERR 11392*7c356e86SAndroid Build Coastguard Worker set -e 11393*7c356e86SAndroid Build Coastguard Worker false 11394*7c356e86SAndroid Build Coastguard Worker echo DONE 11395*7c356e86SAndroid Build Coastguard Worker exit 0 11396*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11397*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 11398*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11399*7c356e86SAndroid Build Coastguard Worker ERR 11400*7c356e86SAndroid Build Coastguard Worker EXIT 11401*7c356e86SAndroid Build Coastguard Worker--- 11402*7c356e86SAndroid Build Coastguard Workername: oksh-seterror-7 11403*7c356e86SAndroid Build Coastguard Workerdescription: 11404*7c356e86SAndroid Build Coastguard Worker The -e flag within a command substitution should be honored 11405*7c356e86SAndroid Build Coastguard Workerstdin: 11406*7c356e86SAndroid Build Coastguard Worker echo $( set -e; false; echo foo ) 11407*7c356e86SAndroid Build Coastguard Workerarguments: !-e! 11408*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11409*7c356e86SAndroid Build Coastguard Worker 11410*7c356e86SAndroid Build Coastguard Worker--- 11411*7c356e86SAndroid Build Coastguard Workername: oksh-input-comsub 11412*7c356e86SAndroid Build Coastguard Workerdescription: 11413*7c356e86SAndroid Build Coastguard Worker A command substitution using input redirection should exit with 11414*7c356e86SAndroid Build Coastguard Worker failure if the input file does not exist. 11415*7c356e86SAndroid Build Coastguard Workerstdin: 11416*7c356e86SAndroid Build Coastguard Worker var=$(< non-existent) 11417*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 11418*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /non-existent/ 11419*7c356e86SAndroid Build Coastguard Worker--- 11420*7c356e86SAndroid Build Coastguard Workername: oksh-empty-for-list 11421*7c356e86SAndroid Build Coastguard Workerdescription: 11422*7c356e86SAndroid Build Coastguard Worker A for list which expands to zero items should not execute the body. 11423*7c356e86SAndroid Build Coastguard Workerstdin: 11424*7c356e86SAndroid Build Coastguard Worker set foo bar baz ; for out in ; do echo $out ; done 11425*7c356e86SAndroid Build Coastguard Worker--- 11426*7c356e86SAndroid Build Coastguard Workername: oksh-varfunction-mod1 11427*7c356e86SAndroid Build Coastguard Workerdescription: 11428*7c356e86SAndroid Build Coastguard Worker (Inspired by PR 2450 on OpenBSD.) Calling 11429*7c356e86SAndroid Build Coastguard Worker FOO=bar f 11430*7c356e86SAndroid Build Coastguard Worker where f is a ksh style function, should not set FOO in the current 11431*7c356e86SAndroid Build Coastguard Worker env. If f is a Bourne style function, (new) also not. Furthermore, 11432*7c356e86SAndroid Build Coastguard Worker the function should receive a correct value of FOO. However, differing 11433*7c356e86SAndroid Build Coastguard Worker from oksh, setting FOO in the function itself must change the value in 11434*7c356e86SAndroid Build Coastguard Worker setting FOO in the function itself should not change the value in 11435*7c356e86SAndroid Build Coastguard Worker global environment. 11436*7c356e86SAndroid Build Coastguard Workerstdin: 11437*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nunset RANDOM\nexport | while IFS= read -r' \ 11438*7c356e86SAndroid Build Coastguard Worker 'RANDOM; do eval '\''print -r -- "$RANDOM=$'\''"$RANDOM"'\'\"\'\; \ 11439*7c356e86SAndroid Build Coastguard Worker done >env; chmod +x env; PATH=.$PATHSEP$PATH 11440*7c356e86SAndroid Build Coastguard Worker function k { 11441*7c356e86SAndroid Build Coastguard Worker if [ x$FOO != xbar ]; then 11442*7c356e86SAndroid Build Coastguard Worker echo 1 11443*7c356e86SAndroid Build Coastguard Worker return 1 11444*7c356e86SAndroid Build Coastguard Worker fi 11445*7c356e86SAndroid Build Coastguard Worker x=$(env | grep FOO) 11446*7c356e86SAndroid Build Coastguard Worker if [ "x$x" != "xFOO=bar" ]; then 11447*7c356e86SAndroid Build Coastguard Worker echo 2 11448*7c356e86SAndroid Build Coastguard Worker return 1; 11449*7c356e86SAndroid Build Coastguard Worker fi 11450*7c356e86SAndroid Build Coastguard Worker FOO=foo 11451*7c356e86SAndroid Build Coastguard Worker return 0 11452*7c356e86SAndroid Build Coastguard Worker } 11453*7c356e86SAndroid Build Coastguard Worker b () { 11454*7c356e86SAndroid Build Coastguard Worker if [ x$FOO != xbar ]; then 11455*7c356e86SAndroid Build Coastguard Worker echo 3 11456*7c356e86SAndroid Build Coastguard Worker return 1 11457*7c356e86SAndroid Build Coastguard Worker fi 11458*7c356e86SAndroid Build Coastguard Worker x=$(env | grep FOO) 11459*7c356e86SAndroid Build Coastguard Worker if [ "x$x" != "xFOO=bar" ]; then 11460*7c356e86SAndroid Build Coastguard Worker echo 4 11461*7c356e86SAndroid Build Coastguard Worker return 1; 11462*7c356e86SAndroid Build Coastguard Worker fi 11463*7c356e86SAndroid Build Coastguard Worker FOO=foo 11464*7c356e86SAndroid Build Coastguard Worker return 0 11465*7c356e86SAndroid Build Coastguard Worker } 11466*7c356e86SAndroid Build Coastguard Worker FOO=bar k 11467*7c356e86SAndroid Build Coastguard Worker if [ $? != 0 ]; then 11468*7c356e86SAndroid Build Coastguard Worker exit 1 11469*7c356e86SAndroid Build Coastguard Worker fi 11470*7c356e86SAndroid Build Coastguard Worker if [ x$FOO != x ]; then 11471*7c356e86SAndroid Build Coastguard Worker exit 1 11472*7c356e86SAndroid Build Coastguard Worker fi 11473*7c356e86SAndroid Build Coastguard Worker FOO=bar b 11474*7c356e86SAndroid Build Coastguard Worker if [ $? != 0 ]; then 11475*7c356e86SAndroid Build Coastguard Worker exit 1 11476*7c356e86SAndroid Build Coastguard Worker fi 11477*7c356e86SAndroid Build Coastguard Worker if [ x$FOO != x ]; then 11478*7c356e86SAndroid Build Coastguard Worker exit 1 11479*7c356e86SAndroid Build Coastguard Worker fi 11480*7c356e86SAndroid Build Coastguard Worker FOO=barbar 11481*7c356e86SAndroid Build Coastguard Worker FOO=bar k 11482*7c356e86SAndroid Build Coastguard Worker if [ $? != 0 ]; then 11483*7c356e86SAndroid Build Coastguard Worker exit 1 11484*7c356e86SAndroid Build Coastguard Worker fi 11485*7c356e86SAndroid Build Coastguard Worker if [ x$FOO != xbarbar ]; then 11486*7c356e86SAndroid Build Coastguard Worker exit 1 11487*7c356e86SAndroid Build Coastguard Worker fi 11488*7c356e86SAndroid Build Coastguard Worker FOO=bar b 11489*7c356e86SAndroid Build Coastguard Worker if [ $? != 0 ]; then 11490*7c356e86SAndroid Build Coastguard Worker exit 1 11491*7c356e86SAndroid Build Coastguard Worker fi 11492*7c356e86SAndroid Build Coastguard Worker if [ x$FOO != xbarbar ]; then 11493*7c356e86SAndroid Build Coastguard Worker exit 1 11494*7c356e86SAndroid Build Coastguard Worker fi 11495*7c356e86SAndroid Build Coastguard Worker--- 11496*7c356e86SAndroid Build Coastguard Workername: fd-cloexec-1 11497*7c356e86SAndroid Build Coastguard Workerdescription: 11498*7c356e86SAndroid Build Coastguard Worker Verify that file descriptors > 2 are private for Korn shells 11499*7c356e86SAndroid Build Coastguard Worker AT&T ksh93 does this still, which means we must keep it as well 11500*7c356e86SAndroid Build Coastguard Workerstdin: 11501*7c356e86SAndroid Build Coastguard Worker cat >cld <<-EOF 11502*7c356e86SAndroid Build Coastguard Worker #!$__perlname 11503*7c356e86SAndroid Build Coastguard Worker open(FH, ">&9") or die "E: open \$!"; 11504*7c356e86SAndroid Build Coastguard Worker syswrite(FH, "Fowl\\n", 5) or die "E: write \$!"; 11505*7c356e86SAndroid Build Coastguard Worker EOF 11506*7c356e86SAndroid Build Coastguard Worker chmod +x cld 11507*7c356e86SAndroid Build Coastguard Worker exec 9>&1 11508*7c356e86SAndroid Build Coastguard Worker ./cld 11509*7c356e86SAndroid Build Coastguard Workerexpected-exit: e != 0 11510*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 11511*7c356e86SAndroid Build Coastguard Worker /E: open / 11512*7c356e86SAndroid Build Coastguard Worker--- 11513*7c356e86SAndroid Build Coastguard Workername: fd-cloexec-2 11514*7c356e86SAndroid Build Coastguard Workerdescription: 11515*7c356e86SAndroid Build Coastguard Worker Verify that file descriptors > 2 are not private for POSIX shells 11516*7c356e86SAndroid Build Coastguard Worker See Debian Bug #154540, Closes: #499139 11517*7c356e86SAndroid Build Coastguard Workerstdin: 11518*7c356e86SAndroid Build Coastguard Worker cat >cld <<-EOF 11519*7c356e86SAndroid Build Coastguard Worker #!$__perlname 11520*7c356e86SAndroid Build Coastguard Worker open(FH, ">&9") or die "E: open \$!"; 11521*7c356e86SAndroid Build Coastguard Worker syswrite(FH, "Fowl\\n", 5) or die "E: write \$!"; 11522*7c356e86SAndroid Build Coastguard Worker EOF 11523*7c356e86SAndroid Build Coastguard Worker chmod +x cld 11524*7c356e86SAndroid Build Coastguard Worker test -n "$POSH_VERSION" || set -o posix 11525*7c356e86SAndroid Build Coastguard Worker exec 9>&1 11526*7c356e86SAndroid Build Coastguard Worker ./cld 11527*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11528*7c356e86SAndroid Build Coastguard Worker Fowl 11529*7c356e86SAndroid Build Coastguard Worker--- 11530*7c356e86SAndroid Build Coastguard Workername: fd-cloexec-3 11531*7c356e86SAndroid Build Coastguard Workerdescription: 11532*7c356e86SAndroid Build Coastguard Worker Another check for close-on-exec 11533*7c356e86SAndroid Build Coastguard Workerstdin: 11534*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname" >ts 11535*7c356e86SAndroid Build Coastguard Worker cat >>ts <<'EOF' 11536*7c356e86SAndroid Build Coastguard Worker s=ERR 11537*7c356e86SAndroid Build Coastguard Worker read -rN-1 -u$1 s 2>/dev/null; e=$? 11538*7c356e86SAndroid Build Coastguard Worker print -r -- "($1, $((!e)), $s)" 11539*7c356e86SAndroid Build Coastguard Worker EOF 11540*7c356e86SAndroid Build Coastguard Worker chmod +x ts 11541*7c356e86SAndroid Build Coastguard Worker print foo >tx 11542*7c356e86SAndroid Build Coastguard Worker runtest() { 11543*7c356e86SAndroid Build Coastguard Worker s=$1; shift 11544*7c356e86SAndroid Build Coastguard Worker print -r -- $("$__progname" "$@" -c "$s") "$@" . 11545*7c356e86SAndroid Build Coastguard Worker } 11546*7c356e86SAndroid Build Coastguard Worker runtest 'exec 3<tx; ./ts 3 3<&3; ./ts 3' 11547*7c356e86SAndroid Build Coastguard Worker runtest 'exec 3<tx; ./ts 3 3<&3; ./ts 3' -o posix 11548*7c356e86SAndroid Build Coastguard Worker runtest 'exec 3<tx; ./ts 3 3<&3; ./ts 3' -o sh 11549*7c356e86SAndroid Build Coastguard Worker runtest 'exec 3<tx; ./ts 4 4<&3; ./ts 4 4<&3' 11550*7c356e86SAndroid Build Coastguard Worker runtest 'exec 3<tx; ./ts 3 3<&3; ./ts 3 3<&3' 11551*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11552*7c356e86SAndroid Build Coastguard Worker (3, 1, foo) (3, 0, ERR) . 11553*7c356e86SAndroid Build Coastguard Worker (3, 1, foo) (3, 1, ) -o posix . 11554*7c356e86SAndroid Build Coastguard Worker (3, 1, foo) (3, 1, ) -o sh . 11555*7c356e86SAndroid Build Coastguard Worker (4, 1, foo) (4, 1, ) . 11556*7c356e86SAndroid Build Coastguard Worker (3, 1, foo) (3, 1, ) . 11557*7c356e86SAndroid Build Coastguard Worker--- 11558*7c356e86SAndroid Build Coastguard Workername: comsub-1a 11559*7c356e86SAndroid Build Coastguard Workerdescription: 11560*7c356e86SAndroid Build Coastguard Worker COMSUB are now parsed recursively, so this works 11561*7c356e86SAndroid Build Coastguard Worker see also regression-6: matching parenthesēs bug 11562*7c356e86SAndroid Build Coastguard Worker Fails on: pdksh bash2 bash3 zsh 11563*7c356e86SAndroid Build Coastguard Worker Passes on: bash4 ksh93 mksh(20110313+) 11564*7c356e86SAndroid Build Coastguard Workerstdin: 11565*7c356e86SAndroid Build Coastguard Worker echo 1 $(case 1 in (1) echo yes;; (2) echo no;; esac) . 11566*7c356e86SAndroid Build Coastguard Worker echo 2 $(case 1 in 1) echo yes;; 2) echo no;; esac) . 11567*7c356e86SAndroid Build Coastguard Worker TEST=1234; echo 3 ${TEST: $(case 1 in (1) echo 1;; (*) echo 2;; esac)} . 11568*7c356e86SAndroid Build Coastguard Worker TEST=5678; echo 4 ${TEST: $(case 1 in 1) echo 1;; *) echo 2;; esac)} . 11569*7c356e86SAndroid Build Coastguard Worker a=($(case 1 in (1) echo 1;; (*) echo 2;; esac)); echo 5 ${a[0]} . 11570*7c356e86SAndroid Build Coastguard Worker a=($(case 1 in 1) echo 1;; *) echo 2;; esac)); echo 6 ${a[0]} . 11571*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11572*7c356e86SAndroid Build Coastguard Worker 1 yes . 11573*7c356e86SAndroid Build Coastguard Worker 2 yes . 11574*7c356e86SAndroid Build Coastguard Worker 3 234 . 11575*7c356e86SAndroid Build Coastguard Worker 4 678 . 11576*7c356e86SAndroid Build Coastguard Worker 5 1 . 11577*7c356e86SAndroid Build Coastguard Worker 6 1 . 11578*7c356e86SAndroid Build Coastguard Worker--- 11579*7c356e86SAndroid Build Coastguard Workername: comsub-1b 11580*7c356e86SAndroid Build Coastguard Workerdescription: 11581*7c356e86SAndroid Build Coastguard Worker COMSUB are now parsed recursively, so this works 11582*7c356e86SAndroid Build Coastguard Worker Fails on: pdksh bash2 bash3 bash4 zsh 11583*7c356e86SAndroid Build Coastguard Worker Passes on: ksh93 mksh(20110313+) 11584*7c356e86SAndroid Build Coastguard Workerstdin: 11585*7c356e86SAndroid Build Coastguard Worker echo 1 $(($(case 1 in (1) echo 1;; (*) echo 2;; esac)+10)) . 11586*7c356e86SAndroid Build Coastguard Worker echo 2 $(($(case 1 in 1) echo 1;; *) echo 2;; esac)+20)) . 11587*7c356e86SAndroid Build Coastguard Worker (( a = $(case 1 in (1) echo 1;; (*) echo 2;; esac) )); echo 3 $a . 11588*7c356e86SAndroid Build Coastguard Worker (( a = $(case 1 in 1) echo 1;; *) echo 2;; esac) )); echo 4 $a . 11589*7c356e86SAndroid Build Coastguard Worker a=($(($(case 1 in (1) echo 1;; (*) echo 2;; esac)+10))); echo 5 ${a[0]} . 11590*7c356e86SAndroid Build Coastguard Worker a=($(($(case 1 in 1) echo 1;; *) echo 2;; esac)+20))); echo 6 ${a[0]} . 11591*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11592*7c356e86SAndroid Build Coastguard Worker 1 11 . 11593*7c356e86SAndroid Build Coastguard Worker 2 21 . 11594*7c356e86SAndroid Build Coastguard Worker 3 1 . 11595*7c356e86SAndroid Build Coastguard Worker 4 1 . 11596*7c356e86SAndroid Build Coastguard Worker 5 11 . 11597*7c356e86SAndroid Build Coastguard Worker 6 21 . 11598*7c356e86SAndroid Build Coastguard Worker--- 11599*7c356e86SAndroid Build Coastguard Workername: comsub-2 11600*7c356e86SAndroid Build Coastguard Workerdescription: 11601*7c356e86SAndroid Build Coastguard Worker RedHat BZ#496791 – another case of missing recursion 11602*7c356e86SAndroid Build Coastguard Worker in parsing COMSUB expressions 11603*7c356e86SAndroid Build Coastguard Worker Fails on: pdksh bash2 bash3¹ bash4¹ zsh 11604*7c356e86SAndroid Build Coastguard Worker Passes on: ksh93 mksh(20110305+) 11605*7c356e86SAndroid Build Coastguard Worker ① bash[34] seem to choke on comment ending with backslash-newline 11606*7c356e86SAndroid Build Coastguard Workerstdin: 11607*7c356e86SAndroid Build Coastguard Worker # a comment with " ' \ 11608*7c356e86SAndroid Build Coastguard Worker x=$( 11609*7c356e86SAndroid Build Coastguard Worker echo yes 11610*7c356e86SAndroid Build Coastguard Worker # a comment with " ' \ 11611*7c356e86SAndroid Build Coastguard Worker ) 11612*7c356e86SAndroid Build Coastguard Worker echo $x 11613*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11614*7c356e86SAndroid Build Coastguard Worker yes 11615*7c356e86SAndroid Build Coastguard Worker--- 11616*7c356e86SAndroid Build Coastguard Workername: comsub-3 11617*7c356e86SAndroid Build Coastguard Workerdescription: 11618*7c356e86SAndroid Build Coastguard Worker Extended test for COMSUB explaining why a recursive parser 11619*7c356e86SAndroid Build Coastguard Worker is a must (a non-recursive parser cannot pass all three of 11620*7c356e86SAndroid Build Coastguard Worker these test cases, especially the ‘#’ is difficult) 11621*7c356e86SAndroid Build Coastguard Workerstdin: 11622*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\necho 1234' >id; chmod +x id; PATH=.$PATHSEP$PATH 11623*7c356e86SAndroid Build Coastguard Worker echo $(typeset -i10 x=16#20; echo $x) 11624*7c356e86SAndroid Build Coastguard Worker echo $(typeset -Uui16 x=16#$(id -u) 11625*7c356e86SAndroid Build Coastguard Worker ) . 11626*7c356e86SAndroid Build Coastguard Worker echo $(c=1; d=1 11627*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 a=36#foo; c=2 11628*7c356e86SAndroid Build Coastguard Worker typeset -Uui16 b=36 #foo; d=2 11629*7c356e86SAndroid Build Coastguard Worker echo $a $b $c $d) 11630*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11631*7c356e86SAndroid Build Coastguard Worker 32 11632*7c356e86SAndroid Build Coastguard Worker . 11633*7c356e86SAndroid Build Coastguard Worker 16#4F68 16#24 2 1 11634*7c356e86SAndroid Build Coastguard Worker--- 11635*7c356e86SAndroid Build Coastguard Workername: comsub-4 11636*7c356e86SAndroid Build Coastguard Workerdescription: 11637*7c356e86SAndroid Build Coastguard Worker Check the tree dump functions for !MKSH_SMALL functionality 11638*7c356e86SAndroid Build Coastguard Workercategory: !smksh 11639*7c356e86SAndroid Build Coastguard Workerstdin: 11640*7c356e86SAndroid Build Coastguard Worker x() { case $1 in u) echo x ;;& *) echo $1 ;; esac; } 11641*7c356e86SAndroid Build Coastguard Worker typeset -f x 11642*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11643*7c356e86SAndroid Build Coastguard Worker x() { 11644*7c356e86SAndroid Build Coastguard Worker case $1 in 11645*7c356e86SAndroid Build Coastguard Worker (u) 11646*7c356e86SAndroid Build Coastguard Worker \echo x 11647*7c356e86SAndroid Build Coastguard Worker ;| 11648*7c356e86SAndroid Build Coastguard Worker (*) 11649*7c356e86SAndroid Build Coastguard Worker \echo $1 11650*7c356e86SAndroid Build Coastguard Worker ;; 11651*7c356e86SAndroid Build Coastguard Worker esac 11652*7c356e86SAndroid Build Coastguard Worker } 11653*7c356e86SAndroid Build Coastguard Worker--- 11654*7c356e86SAndroid Build Coastguard Workername: comsub-5 11655*7c356e86SAndroid Build Coastguard Workerdescription: 11656*7c356e86SAndroid Build Coastguard Worker Check COMSUB works with aliases (does not expand them twice) 11657*7c356e86SAndroid Build Coastguard Worker and reentrancy safety 11658*7c356e86SAndroid Build Coastguard Workerstdin: 11659*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname"'\nfor x in "$@"; do print -r -- "$x"; done' >pfn 11660*7c356e86SAndroid Build Coastguard Worker chmod +x pfn 11661*7c356e86SAndroid Build Coastguard Worker alias echo='echo a' 11662*7c356e86SAndroid Build Coastguard Worker foo() { 11663*7c356e86SAndroid Build Coastguard Worker echo moo 11664*7c356e86SAndroid Build Coastguard Worker ./pfn "$(echo foo)" 11665*7c356e86SAndroid Build Coastguard Worker } 11666*7c356e86SAndroid Build Coastguard Worker ./pfn "$(echo b)" 11667*7c356e86SAndroid Build Coastguard Worker typeset -f foo >x 11668*7c356e86SAndroid Build Coastguard Worker cat x 11669*7c356e86SAndroid Build Coastguard Worker foo 11670*7c356e86SAndroid Build Coastguard Worker . ./x 11671*7c356e86SAndroid Build Coastguard Worker typeset -f foo 11672*7c356e86SAndroid Build Coastguard Worker foo 11673*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11674*7c356e86SAndroid Build Coastguard Worker a b 11675*7c356e86SAndroid Build Coastguard Worker foo() { 11676*7c356e86SAndroid Build Coastguard Worker \echo a moo 11677*7c356e86SAndroid Build Coastguard Worker ./pfn "$(\echo a foo )" 11678*7c356e86SAndroid Build Coastguard Worker } 11679*7c356e86SAndroid Build Coastguard Worker a moo 11680*7c356e86SAndroid Build Coastguard Worker a foo 11681*7c356e86SAndroid Build Coastguard Worker foo() { 11682*7c356e86SAndroid Build Coastguard Worker \echo a moo 11683*7c356e86SAndroid Build Coastguard Worker ./pfn "$(\echo a foo )" 11684*7c356e86SAndroid Build Coastguard Worker } 11685*7c356e86SAndroid Build Coastguard Worker a moo 11686*7c356e86SAndroid Build Coastguard Worker a foo 11687*7c356e86SAndroid Build Coastguard Worker--- 11688*7c356e86SAndroid Build Coastguard Workername: comsub-torture 11689*7c356e86SAndroid Build Coastguard Workerdescription: 11690*7c356e86SAndroid Build Coastguard Worker Check the tree dump functions work correctly 11691*7c356e86SAndroid Build Coastguard Workerstdin: 11692*7c356e86SAndroid Build Coastguard Worker if [[ -z $__progname ]]; then echo >&2 call me with __progname; exit 1; fi 11693*7c356e86SAndroid Build Coastguard Worker while IFS= read -r line; do 11694*7c356e86SAndroid Build Coastguard Worker if [[ $line = '#1' ]]; then 11695*7c356e86SAndroid Build Coastguard Worker lastf=0 11696*7c356e86SAndroid Build Coastguard Worker continue 11697*7c356e86SAndroid Build Coastguard Worker elif [[ $line = EOFN* ]]; then 11698*7c356e86SAndroid Build Coastguard Worker fbody=$fbody$'\n'$line 11699*7c356e86SAndroid Build Coastguard Worker continue 11700*7c356e86SAndroid Build Coastguard Worker elif [[ $line != '#'* ]]; then 11701*7c356e86SAndroid Build Coastguard Worker fbody=$fbody$'\n\t'$line 11702*7c356e86SAndroid Build Coastguard Worker continue 11703*7c356e86SAndroid Build Coastguard Worker fi 11704*7c356e86SAndroid Build Coastguard Worker if (( lastf )); then 11705*7c356e86SAndroid Build Coastguard Worker x="inline_${nextf}() {"$fbody$'\n}\n' 11706*7c356e86SAndroid Build Coastguard Worker print -nr -- "$x" 11707*7c356e86SAndroid Build Coastguard Worker print -r -- "${x}typeset -f inline_$nextf" | "$__progname" 11708*7c356e86SAndroid Build Coastguard Worker x="function comsub_$nextf { x=\$("$fbody$'\n); }\n' 11709*7c356e86SAndroid Build Coastguard Worker print -nr -- "$x" 11710*7c356e86SAndroid Build Coastguard Worker print -r -- "${x}typeset -f comsub_$nextf" | "$__progname" 11711*7c356e86SAndroid Build Coastguard Worker x="function reread_$nextf { x=\$(("$fbody$'\n)|tr u x); }\n' 11712*7c356e86SAndroid Build Coastguard Worker print -nr -- "$x" 11713*7c356e86SAndroid Build Coastguard Worker print -r -- "${x}typeset -f reread_$nextf" | "$__progname" 11714*7c356e86SAndroid Build Coastguard Worker fi 11715*7c356e86SAndroid Build Coastguard Worker lastf=1 11716*7c356e86SAndroid Build Coastguard Worker fbody= 11717*7c356e86SAndroid Build Coastguard Worker nextf=${line#?} 11718*7c356e86SAndroid Build Coastguard Worker done <<'EOD' 11719*7c356e86SAndroid Build Coastguard Worker #1 11720*7c356e86SAndroid Build Coastguard Worker #TCOM 11721*7c356e86SAndroid Build Coastguard Worker vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" 11722*7c356e86SAndroid Build Coastguard Worker #TPAREN_TPIPE_TLIST 11723*7c356e86SAndroid Build Coastguard Worker (echo $foo | tr -dc 0-9; echo) 11724*7c356e86SAndroid Build Coastguard Worker #TAND_TOR 11725*7c356e86SAndroid Build Coastguard Worker cmd && echo ja || echo nein 11726*7c356e86SAndroid Build Coastguard Worker #TSELECT 11727*7c356e86SAndroid Build Coastguard Worker select file in *; do echo "<$file>" ; break ; done 11728*7c356e86SAndroid Build Coastguard Worker #TFOR_TTIME 11729*7c356e86SAndroid Build Coastguard Worker time for i in {1,2,3} ; do echo $i ; done 11730*7c356e86SAndroid Build Coastguard Worker #TCASE 11731*7c356e86SAndroid Build Coastguard Worker case $foo in 1) echo eins;& 2) echo zwei ;| *) echo kann net bis drei zählen;; esac 11732*7c356e86SAndroid Build Coastguard Worker #TIF_TBANG_TDBRACKET_TELIF 11733*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] ; then echo eins; elif [[ 1 = 2 ]]; then echo zwei ;else echo drei; fi 11734*7c356e86SAndroid Build Coastguard Worker #TWHILE 11735*7c356e86SAndroid Build Coastguard Worker i=1; while (( i < 10 )); do echo $i; let ++i; done 11736*7c356e86SAndroid Build Coastguard Worker #TUNTIL 11737*7c356e86SAndroid Build Coastguard Worker i=10; until (( !--i )) ; do echo $i; done 11738*7c356e86SAndroid Build Coastguard Worker #TCOPROC 11739*7c356e86SAndroid Build Coastguard Worker cat * |& ls 11740*7c356e86SAndroid Build Coastguard Worker #TFUNCT_TBRACE_TASYNC 11741*7c356e86SAndroid Build Coastguard Worker function korn { echo eins; echo zwei ; } 11742*7c356e86SAndroid Build Coastguard Worker bourne () { logger * & } 11743*7c356e86SAndroid Build Coastguard Worker #IOREAD_IOCAT 11744*7c356e86SAndroid Build Coastguard Worker tr x u 0<foo >>bar 11745*7c356e86SAndroid Build Coastguard Worker #IOWRITE_IOCLOB_IOHERE_noIOSKIP 11746*7c356e86SAndroid Build Coastguard Worker cat >|bar <<'EOFN' 11747*7c356e86SAndroid Build Coastguard Worker foo 11748*7c356e86SAndroid Build Coastguard Worker EOFN 11749*7c356e86SAndroid Build Coastguard Worker #IOWRITE_noIOCLOB_IOHERE_IOSKIP 11750*7c356e86SAndroid Build Coastguard Worker cat 1>bar <<-EOFI 11751*7c356e86SAndroid Build Coastguard Worker foo 11752*7c356e86SAndroid Build Coastguard Worker EOFI 11753*7c356e86SAndroid Build Coastguard Worker #IORDWR_IODUP 11754*7c356e86SAndroid Build Coastguard Worker sh 1<>/dev/console 0<&1 2>&1 11755*7c356e86SAndroid Build Coastguard Worker #COMSUB_EXPRSUB_FUNSUB_VALSUB 11756*7c356e86SAndroid Build Coastguard Worker echo $(true) $((1+ 2)) ${ :;} ${| REPLY=x;} 11757*7c356e86SAndroid Build Coastguard Worker #QCHAR_OQUOTE_CQUOTE 11758*7c356e86SAndroid Build Coastguard Worker echo fo\ob\"a\`r\'b\$az 11759*7c356e86SAndroid Build Coastguard Worker echo "fo\ob\"a\`r\'b\$az" 11760*7c356e86SAndroid Build Coastguard Worker echo 'fo\ob\"a\`r'\''b\$az' 11761*7c356e86SAndroid Build Coastguard Worker #OSUBST_CSUBST_OPAT_SPAT_CPAT 11762*7c356e86SAndroid Build Coastguard Worker [[ ${foo#bl\(u\)b} = @(bar|baz) ]] 11763*7c356e86SAndroid Build Coastguard Worker #heredoc_closed 11764*7c356e86SAndroid Build Coastguard Worker x=$(cat <<EOFN 11765*7c356e86SAndroid Build Coastguard Worker note there must be no space between EOFN and ) 11766*7c356e86SAndroid Build Coastguard Worker EOFN); echo $x 11767*7c356e86SAndroid Build Coastguard Worker #heredoc_space 11768*7c356e86SAndroid Build Coastguard Worker x=$(cat <<EOFN\ 11769*7c356e86SAndroid Build Coastguard Worker note the space between EOFN and ) is actually part of the here document marker 11770*7c356e86SAndroid Build Coastguard Worker EOFN ); echo $x 11771*7c356e86SAndroid Build Coastguard Worker #patch_motd 11772*7c356e86SAndroid Build Coastguard Worker x=$(sysctl -n kern.version | sed 1q) 11773*7c356e86SAndroid Build Coastguard Worker [[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \ 11774*7c356e86SAndroid Build Coastguard Worker ed -s /etc/motd 2>&1 <<-EOF 11775*7c356e86SAndroid Build Coastguard Worker 1,/^\$/d 11776*7c356e86SAndroid Build Coastguard Worker 0a 11777*7c356e86SAndroid Build Coastguard Worker $x 11778*7c356e86SAndroid Build Coastguard Worker 11779*7c356e86SAndroid Build Coastguard Worker . 11780*7c356e86SAndroid Build Coastguard Worker wq 11781*7c356e86SAndroid Build Coastguard Worker EOF)" = @(?) ]] && rm -f /etc/motd 11782*7c356e86SAndroid Build Coastguard Worker if [[ ! -s /etc/motd ]]; then 11783*7c356e86SAndroid Build Coastguard Worker install -c -o root -g wheel -m 664 /dev/null /etc/motd 11784*7c356e86SAndroid Build Coastguard Worker print -- "$x\n" >/etc/motd 11785*7c356e86SAndroid Build Coastguard Worker fi 11786*7c356e86SAndroid Build Coastguard Worker #wdarrassign 11787*7c356e86SAndroid Build Coastguard Worker case x in 11788*7c356e86SAndroid Build Coastguard Worker x) a+=b; c+=(d e) 11789*7c356e86SAndroid Build Coastguard Worker esac 11790*7c356e86SAndroid Build Coastguard Worker #0 11791*7c356e86SAndroid Build Coastguard Worker EOD 11792*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 11793*7c356e86SAndroid Build Coastguard Worker inline_TCOM() { 11794*7c356e86SAndroid Build Coastguard Worker vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" 11795*7c356e86SAndroid Build Coastguard Worker } 11796*7c356e86SAndroid Build Coastguard Worker inline_TCOM() { 11797*7c356e86SAndroid Build Coastguard Worker vara=1 varb="2 3" \cmd arg1 $arg2 "$arg3 4" 11798*7c356e86SAndroid Build Coastguard Worker } 11799*7c356e86SAndroid Build Coastguard Worker function comsub_TCOM { x=$( 11800*7c356e86SAndroid Build Coastguard Worker vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" 11801*7c356e86SAndroid Build Coastguard Worker ); } 11802*7c356e86SAndroid Build Coastguard Worker function comsub_TCOM { 11803*7c356e86SAndroid Build Coastguard Worker x=$(vara=1 varb="2 3" \cmd arg1 $arg2 "$arg3 4" ) 11804*7c356e86SAndroid Build Coastguard Worker } 11805*7c356e86SAndroid Build Coastguard Worker function reread_TCOM { x=$(( 11806*7c356e86SAndroid Build Coastguard Worker vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" 11807*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 11808*7c356e86SAndroid Build Coastguard Worker function reread_TCOM { 11809*7c356e86SAndroid Build Coastguard Worker x=$( ( vara=1 varb="2 3" \cmd arg1 $arg2 "$arg3 4" ) | \tr u x ) 11810*7c356e86SAndroid Build Coastguard Worker } 11811*7c356e86SAndroid Build Coastguard Worker inline_TPAREN_TPIPE_TLIST() { 11812*7c356e86SAndroid Build Coastguard Worker (echo $foo | tr -dc 0-9; echo) 11813*7c356e86SAndroid Build Coastguard Worker } 11814*7c356e86SAndroid Build Coastguard Worker inline_TPAREN_TPIPE_TLIST() { 11815*7c356e86SAndroid Build Coastguard Worker ( \echo $foo | \tr -dc 0-9 11816*7c356e86SAndroid Build Coastguard Worker \echo ) 11817*7c356e86SAndroid Build Coastguard Worker } 11818*7c356e86SAndroid Build Coastguard Worker function comsub_TPAREN_TPIPE_TLIST { x=$( 11819*7c356e86SAndroid Build Coastguard Worker (echo $foo | tr -dc 0-9; echo) 11820*7c356e86SAndroid Build Coastguard Worker ); } 11821*7c356e86SAndroid Build Coastguard Worker function comsub_TPAREN_TPIPE_TLIST { 11822*7c356e86SAndroid Build Coastguard Worker x=$( ( \echo $foo | \tr -dc 0-9 ; \echo ) ) 11823*7c356e86SAndroid Build Coastguard Worker } 11824*7c356e86SAndroid Build Coastguard Worker function reread_TPAREN_TPIPE_TLIST { x=$(( 11825*7c356e86SAndroid Build Coastguard Worker (echo $foo | tr -dc 0-9; echo) 11826*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 11827*7c356e86SAndroid Build Coastguard Worker function reread_TPAREN_TPIPE_TLIST { 11828*7c356e86SAndroid Build Coastguard Worker x=$( ( ( \echo $foo | \tr -dc 0-9 ; \echo ) ) | \tr u x ) 11829*7c356e86SAndroid Build Coastguard Worker } 11830*7c356e86SAndroid Build Coastguard Worker inline_TAND_TOR() { 11831*7c356e86SAndroid Build Coastguard Worker cmd && echo ja || echo nein 11832*7c356e86SAndroid Build Coastguard Worker } 11833*7c356e86SAndroid Build Coastguard Worker inline_TAND_TOR() { 11834*7c356e86SAndroid Build Coastguard Worker \cmd && \echo ja || \echo nein 11835*7c356e86SAndroid Build Coastguard Worker } 11836*7c356e86SAndroid Build Coastguard Worker function comsub_TAND_TOR { x=$( 11837*7c356e86SAndroid Build Coastguard Worker cmd && echo ja || echo nein 11838*7c356e86SAndroid Build Coastguard Worker ); } 11839*7c356e86SAndroid Build Coastguard Worker function comsub_TAND_TOR { 11840*7c356e86SAndroid Build Coastguard Worker x=$(\cmd && \echo ja || \echo nein ) 11841*7c356e86SAndroid Build Coastguard Worker } 11842*7c356e86SAndroid Build Coastguard Worker function reread_TAND_TOR { x=$(( 11843*7c356e86SAndroid Build Coastguard Worker cmd && echo ja || echo nein 11844*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 11845*7c356e86SAndroid Build Coastguard Worker function reread_TAND_TOR { 11846*7c356e86SAndroid Build Coastguard Worker x=$( ( \cmd && \echo ja || \echo nein ) | \tr u x ) 11847*7c356e86SAndroid Build Coastguard Worker } 11848*7c356e86SAndroid Build Coastguard Worker inline_TSELECT() { 11849*7c356e86SAndroid Build Coastguard Worker select file in *; do echo "<$file>" ; break ; done 11850*7c356e86SAndroid Build Coastguard Worker } 11851*7c356e86SAndroid Build Coastguard Worker inline_TSELECT() { 11852*7c356e86SAndroid Build Coastguard Worker select file in * 11853*7c356e86SAndroid Build Coastguard Worker do 11854*7c356e86SAndroid Build Coastguard Worker \echo "<$file>" 11855*7c356e86SAndroid Build Coastguard Worker \break 11856*7c356e86SAndroid Build Coastguard Worker done 11857*7c356e86SAndroid Build Coastguard Worker } 11858*7c356e86SAndroid Build Coastguard Worker function comsub_TSELECT { x=$( 11859*7c356e86SAndroid Build Coastguard Worker select file in *; do echo "<$file>" ; break ; done 11860*7c356e86SAndroid Build Coastguard Worker ); } 11861*7c356e86SAndroid Build Coastguard Worker function comsub_TSELECT { 11862*7c356e86SAndroid Build Coastguard Worker x=$(select file in * ; do \echo "<$file>" ; \break ; done ) 11863*7c356e86SAndroid Build Coastguard Worker } 11864*7c356e86SAndroid Build Coastguard Worker function reread_TSELECT { x=$(( 11865*7c356e86SAndroid Build Coastguard Worker select file in *; do echo "<$file>" ; break ; done 11866*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 11867*7c356e86SAndroid Build Coastguard Worker function reread_TSELECT { 11868*7c356e86SAndroid Build Coastguard Worker x=$( ( select file in * ; do \echo "<$file>" ; \break ; done ) | \tr u x ) 11869*7c356e86SAndroid Build Coastguard Worker } 11870*7c356e86SAndroid Build Coastguard Worker inline_TFOR_TTIME() { 11871*7c356e86SAndroid Build Coastguard Worker time for i in {1,2,3} ; do echo $i ; done 11872*7c356e86SAndroid Build Coastguard Worker } 11873*7c356e86SAndroid Build Coastguard Worker inline_TFOR_TTIME() { 11874*7c356e86SAndroid Build Coastguard Worker time for i in {1,2,3} 11875*7c356e86SAndroid Build Coastguard Worker do 11876*7c356e86SAndroid Build Coastguard Worker \echo $i 11877*7c356e86SAndroid Build Coastguard Worker done 11878*7c356e86SAndroid Build Coastguard Worker } 11879*7c356e86SAndroid Build Coastguard Worker function comsub_TFOR_TTIME { x=$( 11880*7c356e86SAndroid Build Coastguard Worker time for i in {1,2,3} ; do echo $i ; done 11881*7c356e86SAndroid Build Coastguard Worker ); } 11882*7c356e86SAndroid Build Coastguard Worker function comsub_TFOR_TTIME { 11883*7c356e86SAndroid Build Coastguard Worker x=$(time for i in {1,2,3} ; do \echo $i ; done ) 11884*7c356e86SAndroid Build Coastguard Worker } 11885*7c356e86SAndroid Build Coastguard Worker function reread_TFOR_TTIME { x=$(( 11886*7c356e86SAndroid Build Coastguard Worker time for i in {1,2,3} ; do echo $i ; done 11887*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 11888*7c356e86SAndroid Build Coastguard Worker function reread_TFOR_TTIME { 11889*7c356e86SAndroid Build Coastguard Worker x=$( ( time for i in {1,2,3} ; do \echo $i ; done ) | \tr u x ) 11890*7c356e86SAndroid Build Coastguard Worker } 11891*7c356e86SAndroid Build Coastguard Worker inline_TCASE() { 11892*7c356e86SAndroid Build Coastguard Worker case $foo in 1) echo eins;& 2) echo zwei ;| *) echo kann net bis drei zählen;; esac 11893*7c356e86SAndroid Build Coastguard Worker } 11894*7c356e86SAndroid Build Coastguard Worker inline_TCASE() { 11895*7c356e86SAndroid Build Coastguard Worker case $foo in 11896*7c356e86SAndroid Build Coastguard Worker (1) 11897*7c356e86SAndroid Build Coastguard Worker \echo eins 11898*7c356e86SAndroid Build Coastguard Worker ;& 11899*7c356e86SAndroid Build Coastguard Worker (2) 11900*7c356e86SAndroid Build Coastguard Worker \echo zwei 11901*7c356e86SAndroid Build Coastguard Worker ;| 11902*7c356e86SAndroid Build Coastguard Worker (*) 11903*7c356e86SAndroid Build Coastguard Worker \echo kann net bis drei zählen 11904*7c356e86SAndroid Build Coastguard Worker ;; 11905*7c356e86SAndroid Build Coastguard Worker esac 11906*7c356e86SAndroid Build Coastguard Worker } 11907*7c356e86SAndroid Build Coastguard Worker function comsub_TCASE { x=$( 11908*7c356e86SAndroid Build Coastguard Worker case $foo in 1) echo eins;& 2) echo zwei ;| *) echo kann net bis drei zählen;; esac 11909*7c356e86SAndroid Build Coastguard Worker ); } 11910*7c356e86SAndroid Build Coastguard Worker function comsub_TCASE { 11911*7c356e86SAndroid Build Coastguard Worker x=$(case $foo in (1) \echo eins ;& (2) \echo zwei ;| (*) \echo kann net bis drei zählen ;; esac ) 11912*7c356e86SAndroid Build Coastguard Worker } 11913*7c356e86SAndroid Build Coastguard Worker function reread_TCASE { x=$(( 11914*7c356e86SAndroid Build Coastguard Worker case $foo in 1) echo eins;& 2) echo zwei ;| *) echo kann net bis drei zählen;; esac 11915*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 11916*7c356e86SAndroid Build Coastguard Worker function reread_TCASE { 11917*7c356e86SAndroid Build Coastguard Worker x=$( ( case $foo in (1) \echo eins ;& (2) \echo zwei ;| (*) \echo kann net bis drei zählen ;; esac ) | \tr u x ) 11918*7c356e86SAndroid Build Coastguard Worker } 11919*7c356e86SAndroid Build Coastguard Worker inline_TIF_TBANG_TDBRACKET_TELIF() { 11920*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] ; then echo eins; elif [[ 1 = 2 ]]; then echo zwei ;else echo drei; fi 11921*7c356e86SAndroid Build Coastguard Worker } 11922*7c356e86SAndroid Build Coastguard Worker inline_TIF_TBANG_TDBRACKET_TELIF() { 11923*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] 11924*7c356e86SAndroid Build Coastguard Worker then 11925*7c356e86SAndroid Build Coastguard Worker \echo eins 11926*7c356e86SAndroid Build Coastguard Worker elif [[ 1 = 2 ]] 11927*7c356e86SAndroid Build Coastguard Worker then 11928*7c356e86SAndroid Build Coastguard Worker \echo zwei 11929*7c356e86SAndroid Build Coastguard Worker else 11930*7c356e86SAndroid Build Coastguard Worker \echo drei 11931*7c356e86SAndroid Build Coastguard Worker fi 11932*7c356e86SAndroid Build Coastguard Worker } 11933*7c356e86SAndroid Build Coastguard Worker function comsub_TIF_TBANG_TDBRACKET_TELIF { x=$( 11934*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] ; then echo eins; elif [[ 1 = 2 ]]; then echo zwei ;else echo drei; fi 11935*7c356e86SAndroid Build Coastguard Worker ); } 11936*7c356e86SAndroid Build Coastguard Worker function comsub_TIF_TBANG_TDBRACKET_TELIF { 11937*7c356e86SAndroid Build Coastguard Worker x=$(if ! [[ 1 = 1 ]] ; then \echo eins ; elif [[ 1 = 2 ]] ; then \echo zwei ; else \echo drei ; fi ) 11938*7c356e86SAndroid Build Coastguard Worker } 11939*7c356e86SAndroid Build Coastguard Worker function reread_TIF_TBANG_TDBRACKET_TELIF { x=$(( 11940*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] ; then echo eins; elif [[ 1 = 2 ]]; then echo zwei ;else echo drei; fi 11941*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 11942*7c356e86SAndroid Build Coastguard Worker function reread_TIF_TBANG_TDBRACKET_TELIF { 11943*7c356e86SAndroid Build Coastguard Worker x=$( ( if ! [[ 1 = 1 ]] ; then \echo eins ; elif [[ 1 = 2 ]] ; then \echo zwei ; else \echo drei ; fi ) | \tr u x ) 11944*7c356e86SAndroid Build Coastguard Worker } 11945*7c356e86SAndroid Build Coastguard Worker inline_TWHILE() { 11946*7c356e86SAndroid Build Coastguard Worker i=1; while (( i < 10 )); do echo $i; let ++i; done 11947*7c356e86SAndroid Build Coastguard Worker } 11948*7c356e86SAndroid Build Coastguard Worker inline_TWHILE() { 11949*7c356e86SAndroid Build Coastguard Worker i=1 11950*7c356e86SAndroid Build Coastguard Worker while { 11951*7c356e86SAndroid Build Coastguard Worker \\builtin let " i < 10 " 11952*7c356e86SAndroid Build Coastguard Worker } 11953*7c356e86SAndroid Build Coastguard Worker do 11954*7c356e86SAndroid Build Coastguard Worker \echo $i 11955*7c356e86SAndroid Build Coastguard Worker \let ++i 11956*7c356e86SAndroid Build Coastguard Worker done 11957*7c356e86SAndroid Build Coastguard Worker } 11958*7c356e86SAndroid Build Coastguard Worker function comsub_TWHILE { x=$( 11959*7c356e86SAndroid Build Coastguard Worker i=1; while (( i < 10 )); do echo $i; let ++i; done 11960*7c356e86SAndroid Build Coastguard Worker ); } 11961*7c356e86SAndroid Build Coastguard Worker function comsub_TWHILE { 11962*7c356e86SAndroid Build Coastguard Worker x=$(i=1 ; while { \\builtin let " i < 10 " ; } ; do \echo $i ; \let ++i ; done ) 11963*7c356e86SAndroid Build Coastguard Worker } 11964*7c356e86SAndroid Build Coastguard Worker function reread_TWHILE { x=$(( 11965*7c356e86SAndroid Build Coastguard Worker i=1; while (( i < 10 )); do echo $i; let ++i; done 11966*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 11967*7c356e86SAndroid Build Coastguard Worker function reread_TWHILE { 11968*7c356e86SAndroid Build Coastguard Worker x=$( ( i=1 ; while { \\builtin let " i < 10 " ; } ; do \echo $i ; \let ++i ; done ) | \tr u x ) 11969*7c356e86SAndroid Build Coastguard Worker } 11970*7c356e86SAndroid Build Coastguard Worker inline_TUNTIL() { 11971*7c356e86SAndroid Build Coastguard Worker i=10; until (( !--i )) ; do echo $i; done 11972*7c356e86SAndroid Build Coastguard Worker } 11973*7c356e86SAndroid Build Coastguard Worker inline_TUNTIL() { 11974*7c356e86SAndroid Build Coastguard Worker i=10 11975*7c356e86SAndroid Build Coastguard Worker until { 11976*7c356e86SAndroid Build Coastguard Worker \\builtin let " !--i " 11977*7c356e86SAndroid Build Coastguard Worker } 11978*7c356e86SAndroid Build Coastguard Worker do 11979*7c356e86SAndroid Build Coastguard Worker \echo $i 11980*7c356e86SAndroid Build Coastguard Worker done 11981*7c356e86SAndroid Build Coastguard Worker } 11982*7c356e86SAndroid Build Coastguard Worker function comsub_TUNTIL { x=$( 11983*7c356e86SAndroid Build Coastguard Worker i=10; until (( !--i )) ; do echo $i; done 11984*7c356e86SAndroid Build Coastguard Worker ); } 11985*7c356e86SAndroid Build Coastguard Worker function comsub_TUNTIL { 11986*7c356e86SAndroid Build Coastguard Worker x=$(i=10 ; until { \\builtin let " !--i " ; } ; do \echo $i ; done ) 11987*7c356e86SAndroid Build Coastguard Worker } 11988*7c356e86SAndroid Build Coastguard Worker function reread_TUNTIL { x=$(( 11989*7c356e86SAndroid Build Coastguard Worker i=10; until (( !--i )) ; do echo $i; done 11990*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 11991*7c356e86SAndroid Build Coastguard Worker function reread_TUNTIL { 11992*7c356e86SAndroid Build Coastguard Worker x=$( ( i=10 ; until { \\builtin let " !--i " ; } ; do \echo $i ; done ) | \tr u x ) 11993*7c356e86SAndroid Build Coastguard Worker } 11994*7c356e86SAndroid Build Coastguard Worker inline_TCOPROC() { 11995*7c356e86SAndroid Build Coastguard Worker cat * |& ls 11996*7c356e86SAndroid Build Coastguard Worker } 11997*7c356e86SAndroid Build Coastguard Worker inline_TCOPROC() { 11998*7c356e86SAndroid Build Coastguard Worker \cat * |& 11999*7c356e86SAndroid Build Coastguard Worker \ls 12000*7c356e86SAndroid Build Coastguard Worker } 12001*7c356e86SAndroid Build Coastguard Worker function comsub_TCOPROC { x=$( 12002*7c356e86SAndroid Build Coastguard Worker cat * |& ls 12003*7c356e86SAndroid Build Coastguard Worker ); } 12004*7c356e86SAndroid Build Coastguard Worker function comsub_TCOPROC { 12005*7c356e86SAndroid Build Coastguard Worker x=$(\cat * |& \ls ) 12006*7c356e86SAndroid Build Coastguard Worker } 12007*7c356e86SAndroid Build Coastguard Worker function reread_TCOPROC { x=$(( 12008*7c356e86SAndroid Build Coastguard Worker cat * |& ls 12009*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12010*7c356e86SAndroid Build Coastguard Worker function reread_TCOPROC { 12011*7c356e86SAndroid Build Coastguard Worker x=$( ( \cat * |& \ls ) | \tr u x ) 12012*7c356e86SAndroid Build Coastguard Worker } 12013*7c356e86SAndroid Build Coastguard Worker inline_TFUNCT_TBRACE_TASYNC() { 12014*7c356e86SAndroid Build Coastguard Worker function korn { echo eins; echo zwei ; } 12015*7c356e86SAndroid Build Coastguard Worker bourne () { logger * & } 12016*7c356e86SAndroid Build Coastguard Worker } 12017*7c356e86SAndroid Build Coastguard Worker inline_TFUNCT_TBRACE_TASYNC() { 12018*7c356e86SAndroid Build Coastguard Worker function korn { 12019*7c356e86SAndroid Build Coastguard Worker \echo eins 12020*7c356e86SAndroid Build Coastguard Worker \echo zwei 12021*7c356e86SAndroid Build Coastguard Worker } 12022*7c356e86SAndroid Build Coastguard Worker bourne() { 12023*7c356e86SAndroid Build Coastguard Worker \logger * & 12024*7c356e86SAndroid Build Coastguard Worker } 12025*7c356e86SAndroid Build Coastguard Worker } 12026*7c356e86SAndroid Build Coastguard Worker function comsub_TFUNCT_TBRACE_TASYNC { x=$( 12027*7c356e86SAndroid Build Coastguard Worker function korn { echo eins; echo zwei ; } 12028*7c356e86SAndroid Build Coastguard Worker bourne () { logger * & } 12029*7c356e86SAndroid Build Coastguard Worker ); } 12030*7c356e86SAndroid Build Coastguard Worker function comsub_TFUNCT_TBRACE_TASYNC { 12031*7c356e86SAndroid Build Coastguard Worker x=$(function korn { \echo eins ; \echo zwei ; } ; bourne() { \logger * & } ) 12032*7c356e86SAndroid Build Coastguard Worker } 12033*7c356e86SAndroid Build Coastguard Worker function reread_TFUNCT_TBRACE_TASYNC { x=$(( 12034*7c356e86SAndroid Build Coastguard Worker function korn { echo eins; echo zwei ; } 12035*7c356e86SAndroid Build Coastguard Worker bourne () { logger * & } 12036*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12037*7c356e86SAndroid Build Coastguard Worker function reread_TFUNCT_TBRACE_TASYNC { 12038*7c356e86SAndroid Build Coastguard Worker x=$( ( function korn { \echo eins ; \echo zwei ; } ; bourne() { \logger * & } ) | \tr u x ) 12039*7c356e86SAndroid Build Coastguard Worker } 12040*7c356e86SAndroid Build Coastguard Worker inline_IOREAD_IOCAT() { 12041*7c356e86SAndroid Build Coastguard Worker tr x u 0<foo >>bar 12042*7c356e86SAndroid Build Coastguard Worker } 12043*7c356e86SAndroid Build Coastguard Worker inline_IOREAD_IOCAT() { 12044*7c356e86SAndroid Build Coastguard Worker \tr x u <foo >>bar 12045*7c356e86SAndroid Build Coastguard Worker } 12046*7c356e86SAndroid Build Coastguard Worker function comsub_IOREAD_IOCAT { x=$( 12047*7c356e86SAndroid Build Coastguard Worker tr x u 0<foo >>bar 12048*7c356e86SAndroid Build Coastguard Worker ); } 12049*7c356e86SAndroid Build Coastguard Worker function comsub_IOREAD_IOCAT { 12050*7c356e86SAndroid Build Coastguard Worker x=$(\tr x u <foo >>bar ) 12051*7c356e86SAndroid Build Coastguard Worker } 12052*7c356e86SAndroid Build Coastguard Worker function reread_IOREAD_IOCAT { x=$(( 12053*7c356e86SAndroid Build Coastguard Worker tr x u 0<foo >>bar 12054*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12055*7c356e86SAndroid Build Coastguard Worker function reread_IOREAD_IOCAT { 12056*7c356e86SAndroid Build Coastguard Worker x=$( ( \tr x u <foo >>bar ) | \tr u x ) 12057*7c356e86SAndroid Build Coastguard Worker } 12058*7c356e86SAndroid Build Coastguard Worker inline_IOWRITE_IOCLOB_IOHERE_noIOSKIP() { 12059*7c356e86SAndroid Build Coastguard Worker cat >|bar <<'EOFN' 12060*7c356e86SAndroid Build Coastguard Worker foo 12061*7c356e86SAndroid Build Coastguard Worker EOFN 12062*7c356e86SAndroid Build Coastguard Worker } 12063*7c356e86SAndroid Build Coastguard Worker inline_IOWRITE_IOCLOB_IOHERE_noIOSKIP() { 12064*7c356e86SAndroid Build Coastguard Worker \cat >|bar <<"EOFN" 12065*7c356e86SAndroid Build Coastguard Worker foo 12066*7c356e86SAndroid Build Coastguard Worker EOFN 12067*7c356e86SAndroid Build Coastguard Worker 12068*7c356e86SAndroid Build Coastguard Worker } 12069*7c356e86SAndroid Build Coastguard Worker function comsub_IOWRITE_IOCLOB_IOHERE_noIOSKIP { x=$( 12070*7c356e86SAndroid Build Coastguard Worker cat >|bar <<'EOFN' 12071*7c356e86SAndroid Build Coastguard Worker foo 12072*7c356e86SAndroid Build Coastguard Worker EOFN 12073*7c356e86SAndroid Build Coastguard Worker ); } 12074*7c356e86SAndroid Build Coastguard Worker function comsub_IOWRITE_IOCLOB_IOHERE_noIOSKIP { 12075*7c356e86SAndroid Build Coastguard Worker x=$(\cat >|bar <<"EOFN" 12076*7c356e86SAndroid Build Coastguard Worker foo 12077*7c356e86SAndroid Build Coastguard Worker EOFN 12078*7c356e86SAndroid Build Coastguard Worker ) 12079*7c356e86SAndroid Build Coastguard Worker } 12080*7c356e86SAndroid Build Coastguard Worker function reread_IOWRITE_IOCLOB_IOHERE_noIOSKIP { x=$(( 12081*7c356e86SAndroid Build Coastguard Worker cat >|bar <<'EOFN' 12082*7c356e86SAndroid Build Coastguard Worker foo 12083*7c356e86SAndroid Build Coastguard Worker EOFN 12084*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12085*7c356e86SAndroid Build Coastguard Worker function reread_IOWRITE_IOCLOB_IOHERE_noIOSKIP { 12086*7c356e86SAndroid Build Coastguard Worker x=$( ( \cat >|bar <<"EOFN" ) | \tr u x 12087*7c356e86SAndroid Build Coastguard Worker foo 12088*7c356e86SAndroid Build Coastguard Worker EOFN 12089*7c356e86SAndroid Build Coastguard Worker ) 12090*7c356e86SAndroid Build Coastguard Worker } 12091*7c356e86SAndroid Build Coastguard Worker inline_IOWRITE_noIOCLOB_IOHERE_IOSKIP() { 12092*7c356e86SAndroid Build Coastguard Worker cat 1>bar <<-EOFI 12093*7c356e86SAndroid Build Coastguard Worker foo 12094*7c356e86SAndroid Build Coastguard Worker EOFI 12095*7c356e86SAndroid Build Coastguard Worker } 12096*7c356e86SAndroid Build Coastguard Worker inline_IOWRITE_noIOCLOB_IOHERE_IOSKIP() { 12097*7c356e86SAndroid Build Coastguard Worker \cat >bar <<-EOFI 12098*7c356e86SAndroid Build Coastguard Worker foo 12099*7c356e86SAndroid Build Coastguard Worker EOFI 12100*7c356e86SAndroid Build Coastguard Worker 12101*7c356e86SAndroid Build Coastguard Worker } 12102*7c356e86SAndroid Build Coastguard Worker function comsub_IOWRITE_noIOCLOB_IOHERE_IOSKIP { x=$( 12103*7c356e86SAndroid Build Coastguard Worker cat 1>bar <<-EOFI 12104*7c356e86SAndroid Build Coastguard Worker foo 12105*7c356e86SAndroid Build Coastguard Worker EOFI 12106*7c356e86SAndroid Build Coastguard Worker ); } 12107*7c356e86SAndroid Build Coastguard Worker function comsub_IOWRITE_noIOCLOB_IOHERE_IOSKIP { 12108*7c356e86SAndroid Build Coastguard Worker x=$(\cat >bar <<-EOFI 12109*7c356e86SAndroid Build Coastguard Worker foo 12110*7c356e86SAndroid Build Coastguard Worker EOFI 12111*7c356e86SAndroid Build Coastguard Worker ) 12112*7c356e86SAndroid Build Coastguard Worker } 12113*7c356e86SAndroid Build Coastguard Worker function reread_IOWRITE_noIOCLOB_IOHERE_IOSKIP { x=$(( 12114*7c356e86SAndroid Build Coastguard Worker cat 1>bar <<-EOFI 12115*7c356e86SAndroid Build Coastguard Worker foo 12116*7c356e86SAndroid Build Coastguard Worker EOFI 12117*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12118*7c356e86SAndroid Build Coastguard Worker function reread_IOWRITE_noIOCLOB_IOHERE_IOSKIP { 12119*7c356e86SAndroid Build Coastguard Worker x=$( ( \cat >bar <<-EOFI ) | \tr u x 12120*7c356e86SAndroid Build Coastguard Worker foo 12121*7c356e86SAndroid Build Coastguard Worker EOFI 12122*7c356e86SAndroid Build Coastguard Worker ) 12123*7c356e86SAndroid Build Coastguard Worker } 12124*7c356e86SAndroid Build Coastguard Worker inline_IORDWR_IODUP() { 12125*7c356e86SAndroid Build Coastguard Worker sh 1<>/dev/console 0<&1 2>&1 12126*7c356e86SAndroid Build Coastguard Worker } 12127*7c356e86SAndroid Build Coastguard Worker inline_IORDWR_IODUP() { 12128*7c356e86SAndroid Build Coastguard Worker \sh 1<>/dev/console <&1 2>&1 12129*7c356e86SAndroid Build Coastguard Worker } 12130*7c356e86SAndroid Build Coastguard Worker function comsub_IORDWR_IODUP { x=$( 12131*7c356e86SAndroid Build Coastguard Worker sh 1<>/dev/console 0<&1 2>&1 12132*7c356e86SAndroid Build Coastguard Worker ); } 12133*7c356e86SAndroid Build Coastguard Worker function comsub_IORDWR_IODUP { 12134*7c356e86SAndroid Build Coastguard Worker x=$(\sh 1<>/dev/console <&1 2>&1 ) 12135*7c356e86SAndroid Build Coastguard Worker } 12136*7c356e86SAndroid Build Coastguard Worker function reread_IORDWR_IODUP { x=$(( 12137*7c356e86SAndroid Build Coastguard Worker sh 1<>/dev/console 0<&1 2>&1 12138*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12139*7c356e86SAndroid Build Coastguard Worker function reread_IORDWR_IODUP { 12140*7c356e86SAndroid Build Coastguard Worker x=$( ( \sh 1<>/dev/console <&1 2>&1 ) | \tr u x ) 12141*7c356e86SAndroid Build Coastguard Worker } 12142*7c356e86SAndroid Build Coastguard Worker inline_COMSUB_EXPRSUB_FUNSUB_VALSUB() { 12143*7c356e86SAndroid Build Coastguard Worker echo $(true) $((1+ 2)) ${ :;} ${| REPLY=x;} 12144*7c356e86SAndroid Build Coastguard Worker } 12145*7c356e86SAndroid Build Coastguard Worker inline_COMSUB_EXPRSUB_FUNSUB_VALSUB() { 12146*7c356e86SAndroid Build Coastguard Worker \echo $(\true ) $((1+ 2)) ${ \: ;} ${|REPLY=x ;} 12147*7c356e86SAndroid Build Coastguard Worker } 12148*7c356e86SAndroid Build Coastguard Worker function comsub_COMSUB_EXPRSUB_FUNSUB_VALSUB { x=$( 12149*7c356e86SAndroid Build Coastguard Worker echo $(true) $((1+ 2)) ${ :;} ${| REPLY=x;} 12150*7c356e86SAndroid Build Coastguard Worker ); } 12151*7c356e86SAndroid Build Coastguard Worker function comsub_COMSUB_EXPRSUB_FUNSUB_VALSUB { 12152*7c356e86SAndroid Build Coastguard Worker x=$(\echo $(\true ) $((1+ 2)) ${ \: ;} ${|REPLY=x ;} ) 12153*7c356e86SAndroid Build Coastguard Worker } 12154*7c356e86SAndroid Build Coastguard Worker function reread_COMSUB_EXPRSUB_FUNSUB_VALSUB { x=$(( 12155*7c356e86SAndroid Build Coastguard Worker echo $(true) $((1+ 2)) ${ :;} ${| REPLY=x;} 12156*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12157*7c356e86SAndroid Build Coastguard Worker function reread_COMSUB_EXPRSUB_FUNSUB_VALSUB { 12158*7c356e86SAndroid Build Coastguard Worker x=$( ( \echo $(\true ) $((1+ 2)) ${ \: ;} ${|REPLY=x ;} ) | \tr u x ) 12159*7c356e86SAndroid Build Coastguard Worker } 12160*7c356e86SAndroid Build Coastguard Worker inline_QCHAR_OQUOTE_CQUOTE() { 12161*7c356e86SAndroid Build Coastguard Worker echo fo\ob\"a\`r\'b\$az 12162*7c356e86SAndroid Build Coastguard Worker echo "fo\ob\"a\`r\'b\$az" 12163*7c356e86SAndroid Build Coastguard Worker echo 'fo\ob\"a\`r'\''b\$az' 12164*7c356e86SAndroid Build Coastguard Worker } 12165*7c356e86SAndroid Build Coastguard Worker inline_QCHAR_OQUOTE_CQUOTE() { 12166*7c356e86SAndroid Build Coastguard Worker \echo fo\ob\"a\`r\'b\$az 12167*7c356e86SAndroid Build Coastguard Worker \echo "fo\ob\"a\`r\'b\$az" 12168*7c356e86SAndroid Build Coastguard Worker \echo "fo\\ob\\\"a\\\`r"\'"b\\\$az" 12169*7c356e86SAndroid Build Coastguard Worker } 12170*7c356e86SAndroid Build Coastguard Worker function comsub_QCHAR_OQUOTE_CQUOTE { x=$( 12171*7c356e86SAndroid Build Coastguard Worker echo fo\ob\"a\`r\'b\$az 12172*7c356e86SAndroid Build Coastguard Worker echo "fo\ob\"a\`r\'b\$az" 12173*7c356e86SAndroid Build Coastguard Worker echo 'fo\ob\"a\`r'\''b\$az' 12174*7c356e86SAndroid Build Coastguard Worker ); } 12175*7c356e86SAndroid Build Coastguard Worker function comsub_QCHAR_OQUOTE_CQUOTE { 12176*7c356e86SAndroid Build Coastguard Worker x=$(\echo fo\ob\"a\`r\'b\$az ; \echo "fo\ob\"a\`r\'b\$az" ; \echo "fo\\ob\\\"a\\\`r"\'"b\\\$az" ) 12177*7c356e86SAndroid Build Coastguard Worker } 12178*7c356e86SAndroid Build Coastguard Worker function reread_QCHAR_OQUOTE_CQUOTE { x=$(( 12179*7c356e86SAndroid Build Coastguard Worker echo fo\ob\"a\`r\'b\$az 12180*7c356e86SAndroid Build Coastguard Worker echo "fo\ob\"a\`r\'b\$az" 12181*7c356e86SAndroid Build Coastguard Worker echo 'fo\ob\"a\`r'\''b\$az' 12182*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12183*7c356e86SAndroid Build Coastguard Worker function reread_QCHAR_OQUOTE_CQUOTE { 12184*7c356e86SAndroid Build Coastguard Worker x=$( ( \echo fo\ob\"a\`r\'b\$az ; \echo "fo\ob\"a\`r\'b\$az" ; \echo "fo\\ob\\\"a\\\`r"\'"b\\\$az" ) | \tr u x ) 12185*7c356e86SAndroid Build Coastguard Worker } 12186*7c356e86SAndroid Build Coastguard Worker inline_OSUBST_CSUBST_OPAT_SPAT_CPAT() { 12187*7c356e86SAndroid Build Coastguard Worker [[ ${foo#bl\(u\)b} = @(bar|baz) ]] 12188*7c356e86SAndroid Build Coastguard Worker } 12189*7c356e86SAndroid Build Coastguard Worker inline_OSUBST_CSUBST_OPAT_SPAT_CPAT() { 12190*7c356e86SAndroid Build Coastguard Worker [[ ${foo#bl\(u\)b} = @(bar|baz) ]] 12191*7c356e86SAndroid Build Coastguard Worker } 12192*7c356e86SAndroid Build Coastguard Worker function comsub_OSUBST_CSUBST_OPAT_SPAT_CPAT { x=$( 12193*7c356e86SAndroid Build Coastguard Worker [[ ${foo#bl\(u\)b} = @(bar|baz) ]] 12194*7c356e86SAndroid Build Coastguard Worker ); } 12195*7c356e86SAndroid Build Coastguard Worker function comsub_OSUBST_CSUBST_OPAT_SPAT_CPAT { 12196*7c356e86SAndroid Build Coastguard Worker x=$([[ ${foo#bl\(u\)b} = @(bar|baz) ]] ) 12197*7c356e86SAndroid Build Coastguard Worker } 12198*7c356e86SAndroid Build Coastguard Worker function reread_OSUBST_CSUBST_OPAT_SPAT_CPAT { x=$(( 12199*7c356e86SAndroid Build Coastguard Worker [[ ${foo#bl\(u\)b} = @(bar|baz) ]] 12200*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12201*7c356e86SAndroid Build Coastguard Worker function reread_OSUBST_CSUBST_OPAT_SPAT_CPAT { 12202*7c356e86SAndroid Build Coastguard Worker x=$( ( [[ ${foo#bl\(u\)b} = @(bar|baz) ]] ) | \tr u x ) 12203*7c356e86SAndroid Build Coastguard Worker } 12204*7c356e86SAndroid Build Coastguard Worker inline_heredoc_closed() { 12205*7c356e86SAndroid Build Coastguard Worker x=$(cat <<EOFN 12206*7c356e86SAndroid Build Coastguard Worker note there must be no space between EOFN and ) 12207*7c356e86SAndroid Build Coastguard Worker EOFN); echo $x 12208*7c356e86SAndroid Build Coastguard Worker } 12209*7c356e86SAndroid Build Coastguard Worker inline_heredoc_closed() { 12210*7c356e86SAndroid Build Coastguard Worker x=$(\cat <<EOFN 12211*7c356e86SAndroid Build Coastguard Worker note there must be no space between EOFN and ) 12212*7c356e86SAndroid Build Coastguard Worker EOFN 12213*7c356e86SAndroid Build Coastguard Worker ) 12214*7c356e86SAndroid Build Coastguard Worker \echo $x 12215*7c356e86SAndroid Build Coastguard Worker } 12216*7c356e86SAndroid Build Coastguard Worker function comsub_heredoc_closed { x=$( 12217*7c356e86SAndroid Build Coastguard Worker x=$(cat <<EOFN 12218*7c356e86SAndroid Build Coastguard Worker note there must be no space between EOFN and ) 12219*7c356e86SAndroid Build Coastguard Worker EOFN); echo $x 12220*7c356e86SAndroid Build Coastguard Worker ); } 12221*7c356e86SAndroid Build Coastguard Worker function comsub_heredoc_closed { 12222*7c356e86SAndroid Build Coastguard Worker x=$(x=$(\cat <<EOFN 12223*7c356e86SAndroid Build Coastguard Worker note there must be no space between EOFN and ) 12224*7c356e86SAndroid Build Coastguard Worker EOFN 12225*7c356e86SAndroid Build Coastguard Worker ) ; \echo $x ) 12226*7c356e86SAndroid Build Coastguard Worker } 12227*7c356e86SAndroid Build Coastguard Worker function reread_heredoc_closed { x=$(( 12228*7c356e86SAndroid Build Coastguard Worker x=$(cat <<EOFN 12229*7c356e86SAndroid Build Coastguard Worker note there must be no space between EOFN and ) 12230*7c356e86SAndroid Build Coastguard Worker EOFN); echo $x 12231*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12232*7c356e86SAndroid Build Coastguard Worker function reread_heredoc_closed { 12233*7c356e86SAndroid Build Coastguard Worker x=$( ( x=$(\cat <<EOFN 12234*7c356e86SAndroid Build Coastguard Worker note there must be no space between EOFN and ) 12235*7c356e86SAndroid Build Coastguard Worker EOFN 12236*7c356e86SAndroid Build Coastguard Worker ) ; \echo $x ) | \tr u x ) 12237*7c356e86SAndroid Build Coastguard Worker } 12238*7c356e86SAndroid Build Coastguard Worker inline_heredoc_space() { 12239*7c356e86SAndroid Build Coastguard Worker x=$(cat <<EOFN\ 12240*7c356e86SAndroid Build Coastguard Worker note the space between EOFN and ) is actually part of the here document marker 12241*7c356e86SAndroid Build Coastguard Worker EOFN ); echo $x 12242*7c356e86SAndroid Build Coastguard Worker } 12243*7c356e86SAndroid Build Coastguard Worker inline_heredoc_space() { 12244*7c356e86SAndroid Build Coastguard Worker x=$(\cat <<EOFN\ 12245*7c356e86SAndroid Build Coastguard Worker note the space between EOFN and ) is actually part of the here document marker 12246*7c356e86SAndroid Build Coastguard Worker EOFN 12247*7c356e86SAndroid Build Coastguard Worker ) 12248*7c356e86SAndroid Build Coastguard Worker \echo $x 12249*7c356e86SAndroid Build Coastguard Worker } 12250*7c356e86SAndroid Build Coastguard Worker function comsub_heredoc_space { x=$( 12251*7c356e86SAndroid Build Coastguard Worker x=$(cat <<EOFN\ 12252*7c356e86SAndroid Build Coastguard Worker note the space between EOFN and ) is actually part of the here document marker 12253*7c356e86SAndroid Build Coastguard Worker EOFN ); echo $x 12254*7c356e86SAndroid Build Coastguard Worker ); } 12255*7c356e86SAndroid Build Coastguard Worker function comsub_heredoc_space { 12256*7c356e86SAndroid Build Coastguard Worker x=$(x=$(\cat <<EOFN\ 12257*7c356e86SAndroid Build Coastguard Worker note the space between EOFN and ) is actually part of the here document marker 12258*7c356e86SAndroid Build Coastguard Worker EOFN 12259*7c356e86SAndroid Build Coastguard Worker ) ; \echo $x ) 12260*7c356e86SAndroid Build Coastguard Worker } 12261*7c356e86SAndroid Build Coastguard Worker function reread_heredoc_space { x=$(( 12262*7c356e86SAndroid Build Coastguard Worker x=$(cat <<EOFN\ 12263*7c356e86SAndroid Build Coastguard Worker note the space between EOFN and ) is actually part of the here document marker 12264*7c356e86SAndroid Build Coastguard Worker EOFN ); echo $x 12265*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12266*7c356e86SAndroid Build Coastguard Worker function reread_heredoc_space { 12267*7c356e86SAndroid Build Coastguard Worker x=$( ( x=$(\cat <<EOFN\ 12268*7c356e86SAndroid Build Coastguard Worker note the space between EOFN and ) is actually part of the here document marker 12269*7c356e86SAndroid Build Coastguard Worker EOFN 12270*7c356e86SAndroid Build Coastguard Worker ) ; \echo $x ) | \tr u x ) 12271*7c356e86SAndroid Build Coastguard Worker } 12272*7c356e86SAndroid Build Coastguard Worker inline_patch_motd() { 12273*7c356e86SAndroid Build Coastguard Worker x=$(sysctl -n kern.version | sed 1q) 12274*7c356e86SAndroid Build Coastguard Worker [[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \ 12275*7c356e86SAndroid Build Coastguard Worker ed -s /etc/motd 2>&1 <<-EOF 12276*7c356e86SAndroid Build Coastguard Worker 1,/^\$/d 12277*7c356e86SAndroid Build Coastguard Worker 0a 12278*7c356e86SAndroid Build Coastguard Worker $x 12279*7c356e86SAndroid Build Coastguard Worker 12280*7c356e86SAndroid Build Coastguard Worker . 12281*7c356e86SAndroid Build Coastguard Worker wq 12282*7c356e86SAndroid Build Coastguard Worker EOF)" = @(?) ]] && rm -f /etc/motd 12283*7c356e86SAndroid Build Coastguard Worker if [[ ! -s /etc/motd ]]; then 12284*7c356e86SAndroid Build Coastguard Worker install -c -o root -g wheel -m 664 /dev/null /etc/motd 12285*7c356e86SAndroid Build Coastguard Worker print -- "$x\n" >/etc/motd 12286*7c356e86SAndroid Build Coastguard Worker fi 12287*7c356e86SAndroid Build Coastguard Worker } 12288*7c356e86SAndroid Build Coastguard Worker inline_patch_motd() { 12289*7c356e86SAndroid Build Coastguard Worker x=$(\sysctl -n kern.version | \sed 1q ) 12290*7c356e86SAndroid Build Coastguard Worker [[ -s /etc/motd && "$([[ "$(\head -1 /etc/motd )" != $x ]] && \ed -s /etc/motd 2>&1 <<-EOF 12291*7c356e86SAndroid Build Coastguard Worker 1,/^\$/d 12292*7c356e86SAndroid Build Coastguard Worker 0a 12293*7c356e86SAndroid Build Coastguard Worker $x 12294*7c356e86SAndroid Build Coastguard Worker 12295*7c356e86SAndroid Build Coastguard Worker . 12296*7c356e86SAndroid Build Coastguard Worker wq 12297*7c356e86SAndroid Build Coastguard Worker EOF 12298*7c356e86SAndroid Build Coastguard Worker )" = @(?) ]] && \rm -f /etc/motd 12299*7c356e86SAndroid Build Coastguard Worker if [[ ! -s /etc/motd ]] 12300*7c356e86SAndroid Build Coastguard Worker then 12301*7c356e86SAndroid Build Coastguard Worker \install -c -o root -g wheel -m 664 /dev/null /etc/motd 12302*7c356e86SAndroid Build Coastguard Worker \print -- "$x\n" >/etc/motd 12303*7c356e86SAndroid Build Coastguard Worker fi 12304*7c356e86SAndroid Build Coastguard Worker } 12305*7c356e86SAndroid Build Coastguard Worker function comsub_patch_motd { x=$( 12306*7c356e86SAndroid Build Coastguard Worker x=$(sysctl -n kern.version | sed 1q) 12307*7c356e86SAndroid Build Coastguard Worker [[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \ 12308*7c356e86SAndroid Build Coastguard Worker ed -s /etc/motd 2>&1 <<-EOF 12309*7c356e86SAndroid Build Coastguard Worker 1,/^\$/d 12310*7c356e86SAndroid Build Coastguard Worker 0a 12311*7c356e86SAndroid Build Coastguard Worker $x 12312*7c356e86SAndroid Build Coastguard Worker 12313*7c356e86SAndroid Build Coastguard Worker . 12314*7c356e86SAndroid Build Coastguard Worker wq 12315*7c356e86SAndroid Build Coastguard Worker EOF)" = @(?) ]] && rm -f /etc/motd 12316*7c356e86SAndroid Build Coastguard Worker if [[ ! -s /etc/motd ]]; then 12317*7c356e86SAndroid Build Coastguard Worker install -c -o root -g wheel -m 664 /dev/null /etc/motd 12318*7c356e86SAndroid Build Coastguard Worker print -- "$x\n" >/etc/motd 12319*7c356e86SAndroid Build Coastguard Worker fi 12320*7c356e86SAndroid Build Coastguard Worker ); } 12321*7c356e86SAndroid Build Coastguard Worker function comsub_patch_motd { 12322*7c356e86SAndroid Build Coastguard Worker x=$(x=$(\sysctl -n kern.version | \sed 1q ) ; [[ -s /etc/motd && "$([[ "$(\head -1 /etc/motd )" != $x ]] && \ed -s /etc/motd 2>&1 <<-EOF 12323*7c356e86SAndroid Build Coastguard Worker 1,/^\$/d 12324*7c356e86SAndroid Build Coastguard Worker 0a 12325*7c356e86SAndroid Build Coastguard Worker $x 12326*7c356e86SAndroid Build Coastguard Worker 12327*7c356e86SAndroid Build Coastguard Worker . 12328*7c356e86SAndroid Build Coastguard Worker wq 12329*7c356e86SAndroid Build Coastguard Worker EOF 12330*7c356e86SAndroid Build Coastguard Worker )" = @(?) ]] && \rm -f /etc/motd ; if [[ ! -s /etc/motd ]] ; then \install -c -o root -g wheel -m 664 /dev/null /etc/motd ; \print -- "$x\n" >/etc/motd ; fi ) 12331*7c356e86SAndroid Build Coastguard Worker } 12332*7c356e86SAndroid Build Coastguard Worker function reread_patch_motd { x=$(( 12333*7c356e86SAndroid Build Coastguard Worker x=$(sysctl -n kern.version | sed 1q) 12334*7c356e86SAndroid Build Coastguard Worker [[ -s /etc/motd && "$([[ "$(head -1 /etc/motd)" != $x ]] && \ 12335*7c356e86SAndroid Build Coastguard Worker ed -s /etc/motd 2>&1 <<-EOF 12336*7c356e86SAndroid Build Coastguard Worker 1,/^\$/d 12337*7c356e86SAndroid Build Coastguard Worker 0a 12338*7c356e86SAndroid Build Coastguard Worker $x 12339*7c356e86SAndroid Build Coastguard Worker 12340*7c356e86SAndroid Build Coastguard Worker . 12341*7c356e86SAndroid Build Coastguard Worker wq 12342*7c356e86SAndroid Build Coastguard Worker EOF)" = @(?) ]] && rm -f /etc/motd 12343*7c356e86SAndroid Build Coastguard Worker if [[ ! -s /etc/motd ]]; then 12344*7c356e86SAndroid Build Coastguard Worker install -c -o root -g wheel -m 664 /dev/null /etc/motd 12345*7c356e86SAndroid Build Coastguard Worker print -- "$x\n" >/etc/motd 12346*7c356e86SAndroid Build Coastguard Worker fi 12347*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12348*7c356e86SAndroid Build Coastguard Worker function reread_patch_motd { 12349*7c356e86SAndroid Build Coastguard Worker x=$( ( x=$(\sysctl -n kern.version | \sed 1q ) ; [[ -s /etc/motd && "$([[ "$(\head -1 /etc/motd )" != $x ]] && \ed -s /etc/motd 2>&1 <<-EOF 12350*7c356e86SAndroid Build Coastguard Worker 1,/^\$/d 12351*7c356e86SAndroid Build Coastguard Worker 0a 12352*7c356e86SAndroid Build Coastguard Worker $x 12353*7c356e86SAndroid Build Coastguard Worker 12354*7c356e86SAndroid Build Coastguard Worker . 12355*7c356e86SAndroid Build Coastguard Worker wq 12356*7c356e86SAndroid Build Coastguard Worker EOF 12357*7c356e86SAndroid Build Coastguard Worker )" = @(?) ]] && \rm -f /etc/motd ; if [[ ! -s /etc/motd ]] ; then \install -c -o root -g wheel -m 664 /dev/null /etc/motd ; \print -- "$x\n" >/etc/motd ; fi ) | \tr u x ) 12358*7c356e86SAndroid Build Coastguard Worker } 12359*7c356e86SAndroid Build Coastguard Worker inline_wdarrassign() { 12360*7c356e86SAndroid Build Coastguard Worker case x in 12361*7c356e86SAndroid Build Coastguard Worker x) a+=b; c+=(d e) 12362*7c356e86SAndroid Build Coastguard Worker esac 12363*7c356e86SAndroid Build Coastguard Worker } 12364*7c356e86SAndroid Build Coastguard Worker inline_wdarrassign() { 12365*7c356e86SAndroid Build Coastguard Worker case x in 12366*7c356e86SAndroid Build Coastguard Worker (x) 12367*7c356e86SAndroid Build Coastguard Worker a+=b 12368*7c356e86SAndroid Build Coastguard Worker \\builtin set -A c+ -- d e 12369*7c356e86SAndroid Build Coastguard Worker ;; 12370*7c356e86SAndroid Build Coastguard Worker esac 12371*7c356e86SAndroid Build Coastguard Worker } 12372*7c356e86SAndroid Build Coastguard Worker function comsub_wdarrassign { x=$( 12373*7c356e86SAndroid Build Coastguard Worker case x in 12374*7c356e86SAndroid Build Coastguard Worker x) a+=b; c+=(d e) 12375*7c356e86SAndroid Build Coastguard Worker esac 12376*7c356e86SAndroid Build Coastguard Worker ); } 12377*7c356e86SAndroid Build Coastguard Worker function comsub_wdarrassign { 12378*7c356e86SAndroid Build Coastguard Worker x=$(case x in (x) a+=b ; \\builtin set -A c+ -- d e ;; esac ) 12379*7c356e86SAndroid Build Coastguard Worker } 12380*7c356e86SAndroid Build Coastguard Worker function reread_wdarrassign { x=$(( 12381*7c356e86SAndroid Build Coastguard Worker case x in 12382*7c356e86SAndroid Build Coastguard Worker x) a+=b; c+=(d e) 12383*7c356e86SAndroid Build Coastguard Worker esac 12384*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12385*7c356e86SAndroid Build Coastguard Worker function reread_wdarrassign { 12386*7c356e86SAndroid Build Coastguard Worker x=$( ( case x in (x) a+=b ; \\builtin set -A c+ -- d e ;; esac ) | \tr u x ) 12387*7c356e86SAndroid Build Coastguard Worker } 12388*7c356e86SAndroid Build Coastguard Worker--- 12389*7c356e86SAndroid Build Coastguard Workername: comsub-torture-io 12390*7c356e86SAndroid Build Coastguard Workerdescription: 12391*7c356e86SAndroid Build Coastguard Worker Check the tree dump functions work correctly with I/O redirection 12392*7c356e86SAndroid Build Coastguard Workerstdin: 12393*7c356e86SAndroid Build Coastguard Worker if [[ -z $__progname ]]; then echo >&2 call me with __progname; exit 1; fi 12394*7c356e86SAndroid Build Coastguard Worker while IFS= read -r line; do 12395*7c356e86SAndroid Build Coastguard Worker if [[ $line = '#1' ]]; then 12396*7c356e86SAndroid Build Coastguard Worker lastf=0 12397*7c356e86SAndroid Build Coastguard Worker continue 12398*7c356e86SAndroid Build Coastguard Worker elif [[ $line = EOFN* ]]; then 12399*7c356e86SAndroid Build Coastguard Worker fbody=$fbody$'\n'$line 12400*7c356e86SAndroid Build Coastguard Worker continue 12401*7c356e86SAndroid Build Coastguard Worker elif [[ $line != '#'* ]]; then 12402*7c356e86SAndroid Build Coastguard Worker fbody=$fbody$'\n\t'$line 12403*7c356e86SAndroid Build Coastguard Worker continue 12404*7c356e86SAndroid Build Coastguard Worker fi 12405*7c356e86SAndroid Build Coastguard Worker if (( lastf )); then 12406*7c356e86SAndroid Build Coastguard Worker x="inline_${nextf}() {"$fbody$'\n}\n' 12407*7c356e86SAndroid Build Coastguard Worker print -nr -- "$x" 12408*7c356e86SAndroid Build Coastguard Worker print -r -- "${x}typeset -f inline_$nextf" | "$__progname" 12409*7c356e86SAndroid Build Coastguard Worker x="function comsub_$nextf { x=\$("$fbody$'\n); }\n' 12410*7c356e86SAndroid Build Coastguard Worker print -nr -- "$x" 12411*7c356e86SAndroid Build Coastguard Worker print -r -- "${x}typeset -f comsub_$nextf" | "$__progname" 12412*7c356e86SAndroid Build Coastguard Worker x="function reread_$nextf { x=\$(("$fbody$'\n)|tr u x); }\n' 12413*7c356e86SAndroid Build Coastguard Worker print -nr -- "$x" 12414*7c356e86SAndroid Build Coastguard Worker print -r -- "${x}typeset -f reread_$nextf" | "$__progname" 12415*7c356e86SAndroid Build Coastguard Worker fi 12416*7c356e86SAndroid Build Coastguard Worker lastf=1 12417*7c356e86SAndroid Build Coastguard Worker fbody= 12418*7c356e86SAndroid Build Coastguard Worker nextf=${line#?} 12419*7c356e86SAndroid Build Coastguard Worker done <<'EOD' 12420*7c356e86SAndroid Build Coastguard Worker #1 12421*7c356e86SAndroid Build Coastguard Worker #TCOM 12422*7c356e86SAndroid Build Coastguard Worker vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" >&3 12423*7c356e86SAndroid Build Coastguard Worker #TPAREN_TPIPE_TLIST 12424*7c356e86SAndroid Build Coastguard Worker (echo $foo | tr -dc 0-9 >&3; echo >&3) >&3 12425*7c356e86SAndroid Build Coastguard Worker #TAND_TOR 12426*7c356e86SAndroid Build Coastguard Worker cmd >&3 && >&3 echo ja || echo >&3 nein 12427*7c356e86SAndroid Build Coastguard Worker #TSELECT 12428*7c356e86SAndroid Build Coastguard Worker select file in *; do echo "<$file>" ; break >&3 ; done >&3 12429*7c356e86SAndroid Build Coastguard Worker #TFOR_TTIME 12430*7c356e86SAndroid Build Coastguard Worker for i in {1,2,3} ; do time >&3 echo $i ; done >&3 12431*7c356e86SAndroid Build Coastguard Worker #TCASE 12432*7c356e86SAndroid Build Coastguard Worker case $foo in 1) echo eins >&3;& 2) echo zwei >&3 ;| *) echo kann net bis drei zählen >&3;; esac >&3 12433*7c356e86SAndroid Build Coastguard Worker #TIF_TBANG_TDBRACKET_TELIF 12434*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] >&3 ; then echo eins; elif [[ 1 = 2 ]] >&3; then echo zwei ;else echo drei; fi >&3 12435*7c356e86SAndroid Build Coastguard Worker #TWHILE 12436*7c356e86SAndroid Build Coastguard Worker i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3 12437*7c356e86SAndroid Build Coastguard Worker #TUNTIL 12438*7c356e86SAndroid Build Coastguard Worker i=10; until (( !--i )) >&3 ; do echo $i; done >&3 12439*7c356e86SAndroid Build Coastguard Worker #TCOPROC 12440*7c356e86SAndroid Build Coastguard Worker cat * >&3 |& >&3 ls 12441*7c356e86SAndroid Build Coastguard Worker #TFUNCT_TBRACE_TASYNC 12442*7c356e86SAndroid Build Coastguard Worker function korn { echo eins; echo >&3 zwei ; } 12443*7c356e86SAndroid Build Coastguard Worker bourne () { logger * >&3 & } 12444*7c356e86SAndroid Build Coastguard Worker #COMSUB_EXPRSUB 12445*7c356e86SAndroid Build Coastguard Worker echo $(true >&3) $((1+ 2)) 12446*7c356e86SAndroid Build Coastguard Worker #0 12447*7c356e86SAndroid Build Coastguard Worker EOD 12448*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 12449*7c356e86SAndroid Build Coastguard Worker inline_TCOM() { 12450*7c356e86SAndroid Build Coastguard Worker vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" >&3 12451*7c356e86SAndroid Build Coastguard Worker } 12452*7c356e86SAndroid Build Coastguard Worker inline_TCOM() { 12453*7c356e86SAndroid Build Coastguard Worker vara=1 varb="2 3" \cmd arg1 $arg2 "$arg3 4" >&3 12454*7c356e86SAndroid Build Coastguard Worker } 12455*7c356e86SAndroid Build Coastguard Worker function comsub_TCOM { x=$( 12456*7c356e86SAndroid Build Coastguard Worker vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" >&3 12457*7c356e86SAndroid Build Coastguard Worker ); } 12458*7c356e86SAndroid Build Coastguard Worker function comsub_TCOM { 12459*7c356e86SAndroid Build Coastguard Worker x=$(vara=1 varb="2 3" \cmd arg1 $arg2 "$arg3 4" >&3 ) 12460*7c356e86SAndroid Build Coastguard Worker } 12461*7c356e86SAndroid Build Coastguard Worker function reread_TCOM { x=$(( 12462*7c356e86SAndroid Build Coastguard Worker vara=1 varb='2 3' cmd arg1 $arg2 "$arg3 4" >&3 12463*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12464*7c356e86SAndroid Build Coastguard Worker function reread_TCOM { 12465*7c356e86SAndroid Build Coastguard Worker x=$( ( vara=1 varb="2 3" \cmd arg1 $arg2 "$arg3 4" >&3 ) | \tr u x ) 12466*7c356e86SAndroid Build Coastguard Worker } 12467*7c356e86SAndroid Build Coastguard Worker inline_TPAREN_TPIPE_TLIST() { 12468*7c356e86SAndroid Build Coastguard Worker (echo $foo | tr -dc 0-9 >&3; echo >&3) >&3 12469*7c356e86SAndroid Build Coastguard Worker } 12470*7c356e86SAndroid Build Coastguard Worker inline_TPAREN_TPIPE_TLIST() { 12471*7c356e86SAndroid Build Coastguard Worker ( \echo $foo | \tr -dc 0-9 >&3 12472*7c356e86SAndroid Build Coastguard Worker \echo >&3 ) >&3 12473*7c356e86SAndroid Build Coastguard Worker } 12474*7c356e86SAndroid Build Coastguard Worker function comsub_TPAREN_TPIPE_TLIST { x=$( 12475*7c356e86SAndroid Build Coastguard Worker (echo $foo | tr -dc 0-9 >&3; echo >&3) >&3 12476*7c356e86SAndroid Build Coastguard Worker ); } 12477*7c356e86SAndroid Build Coastguard Worker function comsub_TPAREN_TPIPE_TLIST { 12478*7c356e86SAndroid Build Coastguard Worker x=$( ( \echo $foo | \tr -dc 0-9 >&3 ; \echo >&3 ) >&3 ) 12479*7c356e86SAndroid Build Coastguard Worker } 12480*7c356e86SAndroid Build Coastguard Worker function reread_TPAREN_TPIPE_TLIST { x=$(( 12481*7c356e86SAndroid Build Coastguard Worker (echo $foo | tr -dc 0-9 >&3; echo >&3) >&3 12482*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12483*7c356e86SAndroid Build Coastguard Worker function reread_TPAREN_TPIPE_TLIST { 12484*7c356e86SAndroid Build Coastguard Worker x=$( ( ( \echo $foo | \tr -dc 0-9 >&3 ; \echo >&3 ) >&3 ) | \tr u x ) 12485*7c356e86SAndroid Build Coastguard Worker } 12486*7c356e86SAndroid Build Coastguard Worker inline_TAND_TOR() { 12487*7c356e86SAndroid Build Coastguard Worker cmd >&3 && >&3 echo ja || echo >&3 nein 12488*7c356e86SAndroid Build Coastguard Worker } 12489*7c356e86SAndroid Build Coastguard Worker inline_TAND_TOR() { 12490*7c356e86SAndroid Build Coastguard Worker \cmd >&3 && \echo ja >&3 || \echo nein >&3 12491*7c356e86SAndroid Build Coastguard Worker } 12492*7c356e86SAndroid Build Coastguard Worker function comsub_TAND_TOR { x=$( 12493*7c356e86SAndroid Build Coastguard Worker cmd >&3 && >&3 echo ja || echo >&3 nein 12494*7c356e86SAndroid Build Coastguard Worker ); } 12495*7c356e86SAndroid Build Coastguard Worker function comsub_TAND_TOR { 12496*7c356e86SAndroid Build Coastguard Worker x=$(\cmd >&3 && \echo ja >&3 || \echo nein >&3 ) 12497*7c356e86SAndroid Build Coastguard Worker } 12498*7c356e86SAndroid Build Coastguard Worker function reread_TAND_TOR { x=$(( 12499*7c356e86SAndroid Build Coastguard Worker cmd >&3 && >&3 echo ja || echo >&3 nein 12500*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12501*7c356e86SAndroid Build Coastguard Worker function reread_TAND_TOR { 12502*7c356e86SAndroid Build Coastguard Worker x=$( ( \cmd >&3 && \echo ja >&3 || \echo nein >&3 ) | \tr u x ) 12503*7c356e86SAndroid Build Coastguard Worker } 12504*7c356e86SAndroid Build Coastguard Worker inline_TSELECT() { 12505*7c356e86SAndroid Build Coastguard Worker select file in *; do echo "<$file>" ; break >&3 ; done >&3 12506*7c356e86SAndroid Build Coastguard Worker } 12507*7c356e86SAndroid Build Coastguard Worker inline_TSELECT() { 12508*7c356e86SAndroid Build Coastguard Worker select file in * 12509*7c356e86SAndroid Build Coastguard Worker do 12510*7c356e86SAndroid Build Coastguard Worker \echo "<$file>" 12511*7c356e86SAndroid Build Coastguard Worker \break >&3 12512*7c356e86SAndroid Build Coastguard Worker done >&3 12513*7c356e86SAndroid Build Coastguard Worker } 12514*7c356e86SAndroid Build Coastguard Worker function comsub_TSELECT { x=$( 12515*7c356e86SAndroid Build Coastguard Worker select file in *; do echo "<$file>" ; break >&3 ; done >&3 12516*7c356e86SAndroid Build Coastguard Worker ); } 12517*7c356e86SAndroid Build Coastguard Worker function comsub_TSELECT { 12518*7c356e86SAndroid Build Coastguard Worker x=$(select file in * ; do \echo "<$file>" ; \break >&3 ; done >&3 ) 12519*7c356e86SAndroid Build Coastguard Worker } 12520*7c356e86SAndroid Build Coastguard Worker function reread_TSELECT { x=$(( 12521*7c356e86SAndroid Build Coastguard Worker select file in *; do echo "<$file>" ; break >&3 ; done >&3 12522*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12523*7c356e86SAndroid Build Coastguard Worker function reread_TSELECT { 12524*7c356e86SAndroid Build Coastguard Worker x=$( ( select file in * ; do \echo "<$file>" ; \break >&3 ; done >&3 ) | \tr u x ) 12525*7c356e86SAndroid Build Coastguard Worker } 12526*7c356e86SAndroid Build Coastguard Worker inline_TFOR_TTIME() { 12527*7c356e86SAndroid Build Coastguard Worker for i in {1,2,3} ; do time >&3 echo $i ; done >&3 12528*7c356e86SAndroid Build Coastguard Worker } 12529*7c356e86SAndroid Build Coastguard Worker inline_TFOR_TTIME() { 12530*7c356e86SAndroid Build Coastguard Worker for i in {1,2,3} 12531*7c356e86SAndroid Build Coastguard Worker do 12532*7c356e86SAndroid Build Coastguard Worker time \echo $i >&3 12533*7c356e86SAndroid Build Coastguard Worker done >&3 12534*7c356e86SAndroid Build Coastguard Worker } 12535*7c356e86SAndroid Build Coastguard Worker function comsub_TFOR_TTIME { x=$( 12536*7c356e86SAndroid Build Coastguard Worker for i in {1,2,3} ; do time >&3 echo $i ; done >&3 12537*7c356e86SAndroid Build Coastguard Worker ); } 12538*7c356e86SAndroid Build Coastguard Worker function comsub_TFOR_TTIME { 12539*7c356e86SAndroid Build Coastguard Worker x=$(for i in {1,2,3} ; do time \echo $i >&3 ; done >&3 ) 12540*7c356e86SAndroid Build Coastguard Worker } 12541*7c356e86SAndroid Build Coastguard Worker function reread_TFOR_TTIME { x=$(( 12542*7c356e86SAndroid Build Coastguard Worker for i in {1,2,3} ; do time >&3 echo $i ; done >&3 12543*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12544*7c356e86SAndroid Build Coastguard Worker function reread_TFOR_TTIME { 12545*7c356e86SAndroid Build Coastguard Worker x=$( ( for i in {1,2,3} ; do time \echo $i >&3 ; done >&3 ) | \tr u x ) 12546*7c356e86SAndroid Build Coastguard Worker } 12547*7c356e86SAndroid Build Coastguard Worker inline_TCASE() { 12548*7c356e86SAndroid Build Coastguard Worker case $foo in 1) echo eins >&3;& 2) echo zwei >&3 ;| *) echo kann net bis drei zählen >&3;; esac >&3 12549*7c356e86SAndroid Build Coastguard Worker } 12550*7c356e86SAndroid Build Coastguard Worker inline_TCASE() { 12551*7c356e86SAndroid Build Coastguard Worker case $foo in 12552*7c356e86SAndroid Build Coastguard Worker (1) 12553*7c356e86SAndroid Build Coastguard Worker \echo eins >&3 12554*7c356e86SAndroid Build Coastguard Worker ;& 12555*7c356e86SAndroid Build Coastguard Worker (2) 12556*7c356e86SAndroid Build Coastguard Worker \echo zwei >&3 12557*7c356e86SAndroid Build Coastguard Worker ;| 12558*7c356e86SAndroid Build Coastguard Worker (*) 12559*7c356e86SAndroid Build Coastguard Worker \echo kann net bis drei zählen >&3 12560*7c356e86SAndroid Build Coastguard Worker ;; 12561*7c356e86SAndroid Build Coastguard Worker esac >&3 12562*7c356e86SAndroid Build Coastguard Worker } 12563*7c356e86SAndroid Build Coastguard Worker function comsub_TCASE { x=$( 12564*7c356e86SAndroid Build Coastguard Worker case $foo in 1) echo eins >&3;& 2) echo zwei >&3 ;| *) echo kann net bis drei zählen >&3;; esac >&3 12565*7c356e86SAndroid Build Coastguard Worker ); } 12566*7c356e86SAndroid Build Coastguard Worker function comsub_TCASE { 12567*7c356e86SAndroid Build Coastguard Worker x=$(case $foo in (1) \echo eins >&3 ;& (2) \echo zwei >&3 ;| (*) \echo kann net bis drei zählen >&3 ;; esac >&3 ) 12568*7c356e86SAndroid Build Coastguard Worker } 12569*7c356e86SAndroid Build Coastguard Worker function reread_TCASE { x=$(( 12570*7c356e86SAndroid Build Coastguard Worker case $foo in 1) echo eins >&3;& 2) echo zwei >&3 ;| *) echo kann net bis drei zählen >&3;; esac >&3 12571*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12572*7c356e86SAndroid Build Coastguard Worker function reread_TCASE { 12573*7c356e86SAndroid Build Coastguard Worker x=$( ( case $foo in (1) \echo eins >&3 ;& (2) \echo zwei >&3 ;| (*) \echo kann net bis drei zählen >&3 ;; esac >&3 ) | \tr u x ) 12574*7c356e86SAndroid Build Coastguard Worker } 12575*7c356e86SAndroid Build Coastguard Worker inline_TIF_TBANG_TDBRACKET_TELIF() { 12576*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] >&3 ; then echo eins; elif [[ 1 = 2 ]] >&3; then echo zwei ;else echo drei; fi >&3 12577*7c356e86SAndroid Build Coastguard Worker } 12578*7c356e86SAndroid Build Coastguard Worker inline_TIF_TBANG_TDBRACKET_TELIF() { 12579*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] >&3 12580*7c356e86SAndroid Build Coastguard Worker then 12581*7c356e86SAndroid Build Coastguard Worker \echo eins 12582*7c356e86SAndroid Build Coastguard Worker elif [[ 1 = 2 ]] >&3 12583*7c356e86SAndroid Build Coastguard Worker then 12584*7c356e86SAndroid Build Coastguard Worker \echo zwei 12585*7c356e86SAndroid Build Coastguard Worker else 12586*7c356e86SAndroid Build Coastguard Worker \echo drei 12587*7c356e86SAndroid Build Coastguard Worker fi >&3 12588*7c356e86SAndroid Build Coastguard Worker } 12589*7c356e86SAndroid Build Coastguard Worker function comsub_TIF_TBANG_TDBRACKET_TELIF { x=$( 12590*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] >&3 ; then echo eins; elif [[ 1 = 2 ]] >&3; then echo zwei ;else echo drei; fi >&3 12591*7c356e86SAndroid Build Coastguard Worker ); } 12592*7c356e86SAndroid Build Coastguard Worker function comsub_TIF_TBANG_TDBRACKET_TELIF { 12593*7c356e86SAndroid Build Coastguard Worker x=$(if ! [[ 1 = 1 ]] >&3 ; then \echo eins ; elif [[ 1 = 2 ]] >&3 ; then \echo zwei ; else \echo drei ; fi >&3 ) 12594*7c356e86SAndroid Build Coastguard Worker } 12595*7c356e86SAndroid Build Coastguard Worker function reread_TIF_TBANG_TDBRACKET_TELIF { x=$(( 12596*7c356e86SAndroid Build Coastguard Worker if ! [[ 1 = 1 ]] >&3 ; then echo eins; elif [[ 1 = 2 ]] >&3; then echo zwei ;else echo drei; fi >&3 12597*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12598*7c356e86SAndroid Build Coastguard Worker function reread_TIF_TBANG_TDBRACKET_TELIF { 12599*7c356e86SAndroid Build Coastguard Worker x=$( ( if ! [[ 1 = 1 ]] >&3 ; then \echo eins ; elif [[ 1 = 2 ]] >&3 ; then \echo zwei ; else \echo drei ; fi >&3 ) | \tr u x ) 12600*7c356e86SAndroid Build Coastguard Worker } 12601*7c356e86SAndroid Build Coastguard Worker inline_TWHILE() { 12602*7c356e86SAndroid Build Coastguard Worker i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3 12603*7c356e86SAndroid Build Coastguard Worker } 12604*7c356e86SAndroid Build Coastguard Worker inline_TWHILE() { 12605*7c356e86SAndroid Build Coastguard Worker i=1 12606*7c356e86SAndroid Build Coastguard Worker while { 12607*7c356e86SAndroid Build Coastguard Worker \\builtin let " i < 10 " 12608*7c356e86SAndroid Build Coastguard Worker } >&3 12609*7c356e86SAndroid Build Coastguard Worker do 12610*7c356e86SAndroid Build Coastguard Worker \echo $i 12611*7c356e86SAndroid Build Coastguard Worker \let ++i 12612*7c356e86SAndroid Build Coastguard Worker done >&3 12613*7c356e86SAndroid Build Coastguard Worker } 12614*7c356e86SAndroid Build Coastguard Worker function comsub_TWHILE { x=$( 12615*7c356e86SAndroid Build Coastguard Worker i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3 12616*7c356e86SAndroid Build Coastguard Worker ); } 12617*7c356e86SAndroid Build Coastguard Worker function comsub_TWHILE { 12618*7c356e86SAndroid Build Coastguard Worker x=$(i=1 ; while { \\builtin let " i < 10 " ; } >&3 ; do \echo $i ; \let ++i ; done >&3 ) 12619*7c356e86SAndroid Build Coastguard Worker } 12620*7c356e86SAndroid Build Coastguard Worker function reread_TWHILE { x=$(( 12621*7c356e86SAndroid Build Coastguard Worker i=1; while (( i < 10 )) >&3; do echo $i; let ++i; done >&3 12622*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12623*7c356e86SAndroid Build Coastguard Worker function reread_TWHILE { 12624*7c356e86SAndroid Build Coastguard Worker x=$( ( i=1 ; while { \\builtin let " i < 10 " ; } >&3 ; do \echo $i ; \let ++i ; done >&3 ) | \tr u x ) 12625*7c356e86SAndroid Build Coastguard Worker } 12626*7c356e86SAndroid Build Coastguard Worker inline_TUNTIL() { 12627*7c356e86SAndroid Build Coastguard Worker i=10; until (( !--i )) >&3 ; do echo $i; done >&3 12628*7c356e86SAndroid Build Coastguard Worker } 12629*7c356e86SAndroid Build Coastguard Worker inline_TUNTIL() { 12630*7c356e86SAndroid Build Coastguard Worker i=10 12631*7c356e86SAndroid Build Coastguard Worker until { 12632*7c356e86SAndroid Build Coastguard Worker \\builtin let " !--i " 12633*7c356e86SAndroid Build Coastguard Worker } >&3 12634*7c356e86SAndroid Build Coastguard Worker do 12635*7c356e86SAndroid Build Coastguard Worker \echo $i 12636*7c356e86SAndroid Build Coastguard Worker done >&3 12637*7c356e86SAndroid Build Coastguard Worker } 12638*7c356e86SAndroid Build Coastguard Worker function comsub_TUNTIL { x=$( 12639*7c356e86SAndroid Build Coastguard Worker i=10; until (( !--i )) >&3 ; do echo $i; done >&3 12640*7c356e86SAndroid Build Coastguard Worker ); } 12641*7c356e86SAndroid Build Coastguard Worker function comsub_TUNTIL { 12642*7c356e86SAndroid Build Coastguard Worker x=$(i=10 ; until { \\builtin let " !--i " ; } >&3 ; do \echo $i ; done >&3 ) 12643*7c356e86SAndroid Build Coastguard Worker } 12644*7c356e86SAndroid Build Coastguard Worker function reread_TUNTIL { x=$(( 12645*7c356e86SAndroid Build Coastguard Worker i=10; until (( !--i )) >&3 ; do echo $i; done >&3 12646*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12647*7c356e86SAndroid Build Coastguard Worker function reread_TUNTIL { 12648*7c356e86SAndroid Build Coastguard Worker x=$( ( i=10 ; until { \\builtin let " !--i " ; } >&3 ; do \echo $i ; done >&3 ) | \tr u x ) 12649*7c356e86SAndroid Build Coastguard Worker } 12650*7c356e86SAndroid Build Coastguard Worker inline_TCOPROC() { 12651*7c356e86SAndroid Build Coastguard Worker cat * >&3 |& >&3 ls 12652*7c356e86SAndroid Build Coastguard Worker } 12653*7c356e86SAndroid Build Coastguard Worker inline_TCOPROC() { 12654*7c356e86SAndroid Build Coastguard Worker \cat * >&3 |& 12655*7c356e86SAndroid Build Coastguard Worker \ls >&3 12656*7c356e86SAndroid Build Coastguard Worker } 12657*7c356e86SAndroid Build Coastguard Worker function comsub_TCOPROC { x=$( 12658*7c356e86SAndroid Build Coastguard Worker cat * >&3 |& >&3 ls 12659*7c356e86SAndroid Build Coastguard Worker ); } 12660*7c356e86SAndroid Build Coastguard Worker function comsub_TCOPROC { 12661*7c356e86SAndroid Build Coastguard Worker x=$(\cat * >&3 |& \ls >&3 ) 12662*7c356e86SAndroid Build Coastguard Worker } 12663*7c356e86SAndroid Build Coastguard Worker function reread_TCOPROC { x=$(( 12664*7c356e86SAndroid Build Coastguard Worker cat * >&3 |& >&3 ls 12665*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12666*7c356e86SAndroid Build Coastguard Worker function reread_TCOPROC { 12667*7c356e86SAndroid Build Coastguard Worker x=$( ( \cat * >&3 |& \ls >&3 ) | \tr u x ) 12668*7c356e86SAndroid Build Coastguard Worker } 12669*7c356e86SAndroid Build Coastguard Worker inline_TFUNCT_TBRACE_TASYNC() { 12670*7c356e86SAndroid Build Coastguard Worker function korn { echo eins; echo >&3 zwei ; } 12671*7c356e86SAndroid Build Coastguard Worker bourne () { logger * >&3 & } 12672*7c356e86SAndroid Build Coastguard Worker } 12673*7c356e86SAndroid Build Coastguard Worker inline_TFUNCT_TBRACE_TASYNC() { 12674*7c356e86SAndroid Build Coastguard Worker function korn { 12675*7c356e86SAndroid Build Coastguard Worker \echo eins 12676*7c356e86SAndroid Build Coastguard Worker \echo zwei >&3 12677*7c356e86SAndroid Build Coastguard Worker } 12678*7c356e86SAndroid Build Coastguard Worker bourne() { 12679*7c356e86SAndroid Build Coastguard Worker \logger * >&3 & 12680*7c356e86SAndroid Build Coastguard Worker } 12681*7c356e86SAndroid Build Coastguard Worker } 12682*7c356e86SAndroid Build Coastguard Worker function comsub_TFUNCT_TBRACE_TASYNC { x=$( 12683*7c356e86SAndroid Build Coastguard Worker function korn { echo eins; echo >&3 zwei ; } 12684*7c356e86SAndroid Build Coastguard Worker bourne () { logger * >&3 & } 12685*7c356e86SAndroid Build Coastguard Worker ); } 12686*7c356e86SAndroid Build Coastguard Worker function comsub_TFUNCT_TBRACE_TASYNC { 12687*7c356e86SAndroid Build Coastguard Worker x=$(function korn { \echo eins ; \echo zwei >&3 ; } ; bourne() { \logger * >&3 & } ) 12688*7c356e86SAndroid Build Coastguard Worker } 12689*7c356e86SAndroid Build Coastguard Worker function reread_TFUNCT_TBRACE_TASYNC { x=$(( 12690*7c356e86SAndroid Build Coastguard Worker function korn { echo eins; echo >&3 zwei ; } 12691*7c356e86SAndroid Build Coastguard Worker bourne () { logger * >&3 & } 12692*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12693*7c356e86SAndroid Build Coastguard Worker function reread_TFUNCT_TBRACE_TASYNC { 12694*7c356e86SAndroid Build Coastguard Worker x=$( ( function korn { \echo eins ; \echo zwei >&3 ; } ; bourne() { \logger * >&3 & } ) | \tr u x ) 12695*7c356e86SAndroid Build Coastguard Worker } 12696*7c356e86SAndroid Build Coastguard Worker inline_COMSUB_EXPRSUB() { 12697*7c356e86SAndroid Build Coastguard Worker echo $(true >&3) $((1+ 2)) 12698*7c356e86SAndroid Build Coastguard Worker } 12699*7c356e86SAndroid Build Coastguard Worker inline_COMSUB_EXPRSUB() { 12700*7c356e86SAndroid Build Coastguard Worker \echo $(\true >&3 ) $((1+ 2)) 12701*7c356e86SAndroid Build Coastguard Worker } 12702*7c356e86SAndroid Build Coastguard Worker function comsub_COMSUB_EXPRSUB { x=$( 12703*7c356e86SAndroid Build Coastguard Worker echo $(true >&3) $((1+ 2)) 12704*7c356e86SAndroid Build Coastguard Worker ); } 12705*7c356e86SAndroid Build Coastguard Worker function comsub_COMSUB_EXPRSUB { 12706*7c356e86SAndroid Build Coastguard Worker x=$(\echo $(\true >&3 ) $((1+ 2)) ) 12707*7c356e86SAndroid Build Coastguard Worker } 12708*7c356e86SAndroid Build Coastguard Worker function reread_COMSUB_EXPRSUB { x=$(( 12709*7c356e86SAndroid Build Coastguard Worker echo $(true >&3) $((1+ 2)) 12710*7c356e86SAndroid Build Coastguard Worker )|tr u x); } 12711*7c356e86SAndroid Build Coastguard Worker function reread_COMSUB_EXPRSUB { 12712*7c356e86SAndroid Build Coastguard Worker x=$( ( \echo $(\true >&3 ) $((1+ 2)) ) | \tr u x ) 12713*7c356e86SAndroid Build Coastguard Worker } 12714*7c356e86SAndroid Build Coastguard Worker--- 12715*7c356e86SAndroid Build Coastguard Workername: funsub-1 12716*7c356e86SAndroid Build Coastguard Workerdescription: 12717*7c356e86SAndroid Build Coastguard Worker Check that non-subenvironment command substitution works 12718*7c356e86SAndroid Build Coastguard Workerstdin: 12719*7c356e86SAndroid Build Coastguard Worker set -e 12720*7c356e86SAndroid Build Coastguard Worker foo=bar 12721*7c356e86SAndroid Build Coastguard Worker echo "ob $foo ." 12722*7c356e86SAndroid Build Coastguard Worker echo "${ 12723*7c356e86SAndroid Build Coastguard Worker echo "ib $foo :" 12724*7c356e86SAndroid Build Coastguard Worker foo=baz 12725*7c356e86SAndroid Build Coastguard Worker echo "ia $foo :" 12726*7c356e86SAndroid Build Coastguard Worker false 12727*7c356e86SAndroid Build Coastguard Worker }" . 12728*7c356e86SAndroid Build Coastguard Worker echo "oa $foo ." 12729*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 12730*7c356e86SAndroid Build Coastguard Worker ob bar . 12731*7c356e86SAndroid Build Coastguard Worker ib bar : 12732*7c356e86SAndroid Build Coastguard Worker ia baz : . 12733*7c356e86SAndroid Build Coastguard Worker oa baz . 12734*7c356e86SAndroid Build Coastguard Worker--- 12735*7c356e86SAndroid Build Coastguard Workername: funsub-2 12736*7c356e86SAndroid Build Coastguard Workerdescription: 12737*7c356e86SAndroid Build Coastguard Worker You can now reliably use local and return in funsubs 12738*7c356e86SAndroid Build Coastguard Worker (not exit though) 12739*7c356e86SAndroid Build Coastguard Workerstdin: 12740*7c356e86SAndroid Build Coastguard Worker x=q; e=1; x=${ echo a; e=2; echo x$e;}; echo 1:y$x,$e,$?. 12741*7c356e86SAndroid Build Coastguard Worker x=q; e=1; x=${ echo a; typeset e=2; echo x$e;}; echo 2:y$x,$e,$?. 12742*7c356e86SAndroid Build Coastguard Worker x=q; e=1; x=${ echo a; typeset e=2; return 3; echo x$e;}; echo 3:y$x,$e,$?. 12743*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 12744*7c356e86SAndroid Build Coastguard Worker 1:ya x2,2,0. 12745*7c356e86SAndroid Build Coastguard Worker 2:ya x2,1,0. 12746*7c356e86SAndroid Build Coastguard Worker 3:ya,1,3. 12747*7c356e86SAndroid Build Coastguard Worker--- 12748*7c356e86SAndroid Build Coastguard Workername: valsub-1 12749*7c356e86SAndroid Build Coastguard Workerdescription: 12750*7c356e86SAndroid Build Coastguard Worker Check that "value substitutions" work as advertised 12751*7c356e86SAndroid Build Coastguard Workerstdin: 12752*7c356e86SAndroid Build Coastguard Worker x=1 12753*7c356e86SAndroid Build Coastguard Worker y=2 12754*7c356e86SAndroid Build Coastguard Worker z=3 12755*7c356e86SAndroid Build Coastguard Worker REPLY=4 12756*7c356e86SAndroid Build Coastguard Worker echo "before: x<$x> y<$y> z<$z> R<$REPLY>" 12757*7c356e86SAndroid Build Coastguard Worker x=${| 12758*7c356e86SAndroid Build Coastguard Worker local y 12759*7c356e86SAndroid Build Coastguard Worker echo "start: x<$x> y<$y> z<$z> R<$REPLY>" 12760*7c356e86SAndroid Build Coastguard Worker x=5 12761*7c356e86SAndroid Build Coastguard Worker y=6 12762*7c356e86SAndroid Build Coastguard Worker z=7 12763*7c356e86SAndroid Build Coastguard Worker REPLY=8 12764*7c356e86SAndroid Build Coastguard Worker echo "end: x<$x> y<$y> z<$z> R<$REPLY>" 12765*7c356e86SAndroid Build Coastguard Worker } 12766*7c356e86SAndroid Build Coastguard Worker echo "after: x<$x> y<$y> z<$z> R<$REPLY>" 12767*7c356e86SAndroid Build Coastguard Worker # ensure trailing newlines are kept 12768*7c356e86SAndroid Build Coastguard Worker t=${|REPLY=$'foo\n\n';} 12769*7c356e86SAndroid Build Coastguard Worker typeset -p t 12770*7c356e86SAndroid Build Coastguard Worker echo -n this used to segfault 12771*7c356e86SAndroid Build Coastguard Worker echo ${|true;}$(true). 12772*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 12773*7c356e86SAndroid Build Coastguard Worker before: x<1> y<2> z<3> R<4> 12774*7c356e86SAndroid Build Coastguard Worker start: x<1> y<> z<3> R<> 12775*7c356e86SAndroid Build Coastguard Worker end: x<5> y<6> z<7> R<8> 12776*7c356e86SAndroid Build Coastguard Worker after: x<8> y<2> z<7> R<4> 12777*7c356e86SAndroid Build Coastguard Worker typeset t=$'foo\n\n' 12778*7c356e86SAndroid Build Coastguard Worker this used to segfault. 12779*7c356e86SAndroid Build Coastguard Worker--- 12780*7c356e86SAndroid Build Coastguard Workername: event-subst-3 12781*7c356e86SAndroid Build Coastguard Workerdescription: 12782*7c356e86SAndroid Build Coastguard Worker Check that '!' substitution in noninteractive mode is ignored 12783*7c356e86SAndroid Build Coastguard Workerfile-setup: file 755 "falsetto" 12784*7c356e86SAndroid Build Coastguard Worker #! /bin/sh 12785*7c356e86SAndroid Build Coastguard Worker echo molto bene 12786*7c356e86SAndroid Build Coastguard Worker exit 42 12787*7c356e86SAndroid Build Coastguard Workerfile-setup: file 755 "!false" 12788*7c356e86SAndroid Build Coastguard Worker #! /bin/sh 12789*7c356e86SAndroid Build Coastguard Worker echo si 12790*7c356e86SAndroid Build Coastguard Workerstdin: 12791*7c356e86SAndroid Build Coastguard Worker export PATH=.$PATHSEP$PATH 12792*7c356e86SAndroid Build Coastguard Worker falsetto 12793*7c356e86SAndroid Build Coastguard Worker echo yeap 12794*7c356e86SAndroid Build Coastguard Worker !false 12795*7c356e86SAndroid Build Coastguard Worker echo meow 12796*7c356e86SAndroid Build Coastguard Worker ! false 12797*7c356e86SAndroid Build Coastguard Worker echo = $? 12798*7c356e86SAndroid Build Coastguard Worker if 12799*7c356e86SAndroid Build Coastguard Worker ! false; then echo foo; else echo bar; fi 12800*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 12801*7c356e86SAndroid Build Coastguard Worker molto bene 12802*7c356e86SAndroid Build Coastguard Worker yeap 12803*7c356e86SAndroid Build Coastguard Worker si 12804*7c356e86SAndroid Build Coastguard Worker meow 12805*7c356e86SAndroid Build Coastguard Worker = 0 12806*7c356e86SAndroid Build Coastguard Worker foo 12807*7c356e86SAndroid Build Coastguard Worker--- 12808*7c356e86SAndroid Build Coastguard Workername: event-subst-0 12809*7c356e86SAndroid Build Coastguard Workerdescription: 12810*7c356e86SAndroid Build Coastguard Worker Check that '!' substitution in interactive mode is ignored 12811*7c356e86SAndroid Build Coastguard Workerneed-ctty: yes 12812*7c356e86SAndroid Build Coastguard Workerarguments: !-i! 12813*7c356e86SAndroid Build Coastguard Workerfile-setup: file 755 "falsetto" 12814*7c356e86SAndroid Build Coastguard Worker #! /bin/sh 12815*7c356e86SAndroid Build Coastguard Worker echo molto bene 12816*7c356e86SAndroid Build Coastguard Worker exit 42 12817*7c356e86SAndroid Build Coastguard Workerfile-setup: file 755 "!false" 12818*7c356e86SAndroid Build Coastguard Worker #! /bin/sh 12819*7c356e86SAndroid Build Coastguard Worker echo si 12820*7c356e86SAndroid Build Coastguard Workerstdin: 12821*7c356e86SAndroid Build Coastguard Worker export PATH=.$PATHSEP$PATH 12822*7c356e86SAndroid Build Coastguard Worker falsetto 12823*7c356e86SAndroid Build Coastguard Worker echo yeap 12824*7c356e86SAndroid Build Coastguard Worker !false 12825*7c356e86SAndroid Build Coastguard Worker echo meow 12826*7c356e86SAndroid Build Coastguard Worker ! false 12827*7c356e86SAndroid Build Coastguard Worker echo = $? 12828*7c356e86SAndroid Build Coastguard Worker if 12829*7c356e86SAndroid Build Coastguard Worker ! false; then echo foo; else echo bar; fi 12830*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 12831*7c356e86SAndroid Build Coastguard Worker molto bene 12832*7c356e86SAndroid Build Coastguard Worker yeap 12833*7c356e86SAndroid Build Coastguard Worker si 12834*7c356e86SAndroid Build Coastguard Worker meow 12835*7c356e86SAndroid Build Coastguard Worker = 0 12836*7c356e86SAndroid Build Coastguard Worker foo 12837*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 12838*7c356e86SAndroid Build Coastguard Worker /.*/ 12839*7c356e86SAndroid Build Coastguard Worker--- 12840*7c356e86SAndroid Build Coastguard Workername: nounset-1 12841*7c356e86SAndroid Build Coastguard Workerdescription: 12842*7c356e86SAndroid Build Coastguard Worker Check that "set -u" matches (future) SUSv4 requirement 12843*7c356e86SAndroid Build Coastguard Workerstdin: 12844*7c356e86SAndroid Build Coastguard Worker (set -u 12845*7c356e86SAndroid Build Coastguard Worker try() { 12846*7c356e86SAndroid Build Coastguard Worker local v 12847*7c356e86SAndroid Build Coastguard Worker eval v=\$$1 12848*7c356e86SAndroid Build Coastguard Worker if [[ -n $v ]]; then 12849*7c356e86SAndroid Build Coastguard Worker echo $1=nz 12850*7c356e86SAndroid Build Coastguard Worker else 12851*7c356e86SAndroid Build Coastguard Worker echo $1=zf 12852*7c356e86SAndroid Build Coastguard Worker fi 12853*7c356e86SAndroid Build Coastguard Worker } 12854*7c356e86SAndroid Build Coastguard Worker x=y 12855*7c356e86SAndroid Build Coastguard Worker (echo $x) 12856*7c356e86SAndroid Build Coastguard Worker echo =1 12857*7c356e86SAndroid Build Coastguard Worker (echo $y) 12858*7c356e86SAndroid Build Coastguard Worker echo =2 12859*7c356e86SAndroid Build Coastguard Worker (try x) 12860*7c356e86SAndroid Build Coastguard Worker echo =3 12861*7c356e86SAndroid Build Coastguard Worker (try y) 12862*7c356e86SAndroid Build Coastguard Worker echo =4 12863*7c356e86SAndroid Build Coastguard Worker (try 0) 12864*7c356e86SAndroid Build Coastguard Worker echo =5 12865*7c356e86SAndroid Build Coastguard Worker (try 2) 12866*7c356e86SAndroid Build Coastguard Worker echo =6 12867*7c356e86SAndroid Build Coastguard Worker (try) 12868*7c356e86SAndroid Build Coastguard Worker echo =7 12869*7c356e86SAndroid Build Coastguard Worker (echo at=$@) 12870*7c356e86SAndroid Build Coastguard Worker echo =8 12871*7c356e86SAndroid Build Coastguard Worker (echo asterisk=$*) 12872*7c356e86SAndroid Build Coastguard Worker echo =9 12873*7c356e86SAndroid Build Coastguard Worker (echo $?) 12874*7c356e86SAndroid Build Coastguard Worker echo =10 12875*7c356e86SAndroid Build Coastguard Worker (echo $!) 12876*7c356e86SAndroid Build Coastguard Worker echo =11 12877*7c356e86SAndroid Build Coastguard Worker (echo $-) 12878*7c356e86SAndroid Build Coastguard Worker echo =12 12879*7c356e86SAndroid Build Coastguard Worker #(echo $_) 12880*7c356e86SAndroid Build Coastguard Worker #echo =13 12881*7c356e86SAndroid Build Coastguard Worker (echo $#) 12882*7c356e86SAndroid Build Coastguard Worker echo =14 12883*7c356e86SAndroid Build Coastguard Worker (mypid=$$; try mypid) 12884*7c356e86SAndroid Build Coastguard Worker echo =15 12885*7c356e86SAndroid Build Coastguard Worker ) 2>&1 | sed -e 's/^[A-Za-z]://' -e 's/^[^]]*]//' -e 's/^[^:]*: *//' 12886*7c356e86SAndroid Build Coastguard Worker exit ${PIPESTATUS[0]} 12887*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 12888*7c356e86SAndroid Build Coastguard Worker y 12889*7c356e86SAndroid Build Coastguard Worker =1 12890*7c356e86SAndroid Build Coastguard Worker y: parameter not set 12891*7c356e86SAndroid Build Coastguard Worker =2 12892*7c356e86SAndroid Build Coastguard Worker x=nz 12893*7c356e86SAndroid Build Coastguard Worker =3 12894*7c356e86SAndroid Build Coastguard Worker y: parameter not set 12895*7c356e86SAndroid Build Coastguard Worker =4 12896*7c356e86SAndroid Build Coastguard Worker 0=nz 12897*7c356e86SAndroid Build Coastguard Worker =5 12898*7c356e86SAndroid Build Coastguard Worker 2: parameter not set 12899*7c356e86SAndroid Build Coastguard Worker =6 12900*7c356e86SAndroid Build Coastguard Worker 1: parameter not set 12901*7c356e86SAndroid Build Coastguard Worker =7 12902*7c356e86SAndroid Build Coastguard Worker at= 12903*7c356e86SAndroid Build Coastguard Worker =8 12904*7c356e86SAndroid Build Coastguard Worker asterisk= 12905*7c356e86SAndroid Build Coastguard Worker =9 12906*7c356e86SAndroid Build Coastguard Worker 0 12907*7c356e86SAndroid Build Coastguard Worker =10 12908*7c356e86SAndroid Build Coastguard Worker !: parameter not set 12909*7c356e86SAndroid Build Coastguard Worker =11 12910*7c356e86SAndroid Build Coastguard Worker ush 12911*7c356e86SAndroid Build Coastguard Worker =12 12912*7c356e86SAndroid Build Coastguard Worker 0 12913*7c356e86SAndroid Build Coastguard Worker =14 12914*7c356e86SAndroid Build Coastguard Worker mypid=nz 12915*7c356e86SAndroid Build Coastguard Worker =15 12916*7c356e86SAndroid Build Coastguard Worker--- 12917*7c356e86SAndroid Build Coastguard Workername: nameref-1 12918*7c356e86SAndroid Build Coastguard Workerdescription: 12919*7c356e86SAndroid Build Coastguard Worker Testsuite for nameref (bound variables) 12920*7c356e86SAndroid Build Coastguard Workerstdin: 12921*7c356e86SAndroid Build Coastguard Worker bar=global 12922*7c356e86SAndroid Build Coastguard Worker typeset -n ir2=bar 12923*7c356e86SAndroid Build Coastguard Worker typeset -n ind=ir2 12924*7c356e86SAndroid Build Coastguard Worker echo !ind: ${!ind} 12925*7c356e86SAndroid Build Coastguard Worker echo ind: $ind 12926*7c356e86SAndroid Build Coastguard Worker echo !ir2: ${!ir2} 12927*7c356e86SAndroid Build Coastguard Worker echo ir2: $ir2 12928*7c356e86SAndroid Build Coastguard Worker typeset +n ind 12929*7c356e86SAndroid Build Coastguard Worker echo !ind: ${!ind} 12930*7c356e86SAndroid Build Coastguard Worker echo ind: $ind 12931*7c356e86SAndroid Build Coastguard Worker typeset -n ir2=ind 12932*7c356e86SAndroid Build Coastguard Worker echo !ir2: ${!ir2} 12933*7c356e86SAndroid Build Coastguard Worker echo ir2: $ir2 12934*7c356e86SAndroid Build Coastguard Worker set|grep ^ir2|sed 's/^/s1: /' 12935*7c356e86SAndroid Build Coastguard Worker typeset|grep ' ir2'|sed -e 's/^/s2: /' -e 's/nameref/typeset -n/' 12936*7c356e86SAndroid Build Coastguard Worker set -A blub -- e1 e2 e3 12937*7c356e86SAndroid Build Coastguard Worker typeset -n ind=blub 12938*7c356e86SAndroid Build Coastguard Worker typeset -n ir2=blub[2] 12939*7c356e86SAndroid Build Coastguard Worker echo !ind[1]: ${!ind[1]} 12940*7c356e86SAndroid Build Coastguard Worker echo !ir2: $!ir2 12941*7c356e86SAndroid Build Coastguard Worker echo ind[1]: ${ind[1]} 12942*7c356e86SAndroid Build Coastguard Worker echo ir2: $ir2 12943*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 12944*7c356e86SAndroid Build Coastguard Worker !ind: bar 12945*7c356e86SAndroid Build Coastguard Worker ind: global 12946*7c356e86SAndroid Build Coastguard Worker !ir2: bar 12947*7c356e86SAndroid Build Coastguard Worker ir2: global 12948*7c356e86SAndroid Build Coastguard Worker !ind: ind 12949*7c356e86SAndroid Build Coastguard Worker ind: ir2 12950*7c356e86SAndroid Build Coastguard Worker !ir2: ind 12951*7c356e86SAndroid Build Coastguard Worker ir2: ir2 12952*7c356e86SAndroid Build Coastguard Worker s1: ir2=ind 12953*7c356e86SAndroid Build Coastguard Worker s2: typeset -n ir2 12954*7c356e86SAndroid Build Coastguard Worker !ind[1]: blub[1] 12955*7c356e86SAndroid Build Coastguard Worker !ir2: ir2 12956*7c356e86SAndroid Build Coastguard Worker ind[1]: e2 12957*7c356e86SAndroid Build Coastguard Worker ir2: e3 12958*7c356e86SAndroid Build Coastguard Worker--- 12959*7c356e86SAndroid Build Coastguard Workername: nameref-2da 12960*7c356e86SAndroid Build Coastguard Workerdescription: 12961*7c356e86SAndroid Build Coastguard Worker Testsuite for nameref (bound variables) 12962*7c356e86SAndroid Build Coastguard Worker Functions, argument given directly, after local 12963*7c356e86SAndroid Build Coastguard Workerstdin: 12964*7c356e86SAndroid Build Coastguard Worker function foo { 12965*7c356e86SAndroid Build Coastguard Worker typeset bar=lokal baz=auch 12966*7c356e86SAndroid Build Coastguard Worker typeset -n v=bar 12967*7c356e86SAndroid Build Coastguard Worker echo entering 12968*7c356e86SAndroid Build Coastguard Worker echo !v: ${!v} 12969*7c356e86SAndroid Build Coastguard Worker echo !bar: ${!bar} 12970*7c356e86SAndroid Build Coastguard Worker echo !baz: ${!baz} 12971*7c356e86SAndroid Build Coastguard Worker echo bar: $bar 12972*7c356e86SAndroid Build Coastguard Worker echo v: $v 12973*7c356e86SAndroid Build Coastguard Worker v=123 12974*7c356e86SAndroid Build Coastguard Worker echo bar: $bar 12975*7c356e86SAndroid Build Coastguard Worker echo v: $v 12976*7c356e86SAndroid Build Coastguard Worker echo exiting 12977*7c356e86SAndroid Build Coastguard Worker } 12978*7c356e86SAndroid Build Coastguard Worker bar=global 12979*7c356e86SAndroid Build Coastguard Worker echo bar: $bar 12980*7c356e86SAndroid Build Coastguard Worker foo bar 12981*7c356e86SAndroid Build Coastguard Worker echo bar: $bar 12982*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 12983*7c356e86SAndroid Build Coastguard Worker bar: global 12984*7c356e86SAndroid Build Coastguard Worker entering 12985*7c356e86SAndroid Build Coastguard Worker !v: bar 12986*7c356e86SAndroid Build Coastguard Worker !bar: bar 12987*7c356e86SAndroid Build Coastguard Worker !baz: baz 12988*7c356e86SAndroid Build Coastguard Worker bar: lokal 12989*7c356e86SAndroid Build Coastguard Worker v: lokal 12990*7c356e86SAndroid Build Coastguard Worker bar: 123 12991*7c356e86SAndroid Build Coastguard Worker v: 123 12992*7c356e86SAndroid Build Coastguard Worker exiting 12993*7c356e86SAndroid Build Coastguard Worker bar: global 12994*7c356e86SAndroid Build Coastguard Worker--- 12995*7c356e86SAndroid Build Coastguard Workername: nameref-3 12996*7c356e86SAndroid Build Coastguard Workerdescription: 12997*7c356e86SAndroid Build Coastguard Worker Advanced testsuite for bound variables (ksh93 fails this) 12998*7c356e86SAndroid Build Coastguard Workerstdin: 12999*7c356e86SAndroid Build Coastguard Worker typeset -n foo=bar[i] 13000*7c356e86SAndroid Build Coastguard Worker set -A bar -- b c a 13001*7c356e86SAndroid Build Coastguard Worker for i in 0 1 2 3; do 13002*7c356e86SAndroid Build Coastguard Worker print $i $foo . 13003*7c356e86SAndroid Build Coastguard Worker done 13004*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13005*7c356e86SAndroid Build Coastguard Worker 0 b . 13006*7c356e86SAndroid Build Coastguard Worker 1 c . 13007*7c356e86SAndroid Build Coastguard Worker 2 a . 13008*7c356e86SAndroid Build Coastguard Worker 3 . 13009*7c356e86SAndroid Build Coastguard Worker--- 13010*7c356e86SAndroid Build Coastguard Workername: nameref-4 13011*7c356e86SAndroid Build Coastguard Workerdescription: 13012*7c356e86SAndroid Build Coastguard Worker Ensure we don't run in an infinite loop 13013*7c356e86SAndroid Build Coastguard Workertime-limit: 3 13014*7c356e86SAndroid Build Coastguard Workerstdin: 13015*7c356e86SAndroid Build Coastguard Worker baz() { 13016*7c356e86SAndroid Build Coastguard Worker typeset -n foo=fnord fnord=foo 13017*7c356e86SAndroid Build Coastguard Worker foo[0]=bar 13018*7c356e86SAndroid Build Coastguard Worker } 13019*7c356e86SAndroid Build Coastguard Worker set -A foo bad 13020*7c356e86SAndroid Build Coastguard Worker echo sind $foo . 13021*7c356e86SAndroid Build Coastguard Worker baz 13022*7c356e86SAndroid Build Coastguard Worker echo blah $foo . 13023*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13024*7c356e86SAndroid Build Coastguard Worker sind bad . 13025*7c356e86SAndroid Build Coastguard Worker blah bad . 13026*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 13027*7c356e86SAndroid Build Coastguard Worker /fnord: expression recurses on parameter/ 13028*7c356e86SAndroid Build Coastguard Worker--- 13029*7c356e86SAndroid Build Coastguard Workername: better-parens-1a 13030*7c356e86SAndroid Build Coastguard Workerdescription: 13031*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13032*7c356e86SAndroid Build Coastguard Workerstdin: 13033*7c356e86SAndroid Build Coastguard Worker if ( (echo fubar)|tr u x); then 13034*7c356e86SAndroid Build Coastguard Worker echo ja 13035*7c356e86SAndroid Build Coastguard Worker else 13036*7c356e86SAndroid Build Coastguard Worker echo nein 13037*7c356e86SAndroid Build Coastguard Worker fi 13038*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13039*7c356e86SAndroid Build Coastguard Worker fxbar 13040*7c356e86SAndroid Build Coastguard Worker ja 13041*7c356e86SAndroid Build Coastguard Worker--- 13042*7c356e86SAndroid Build Coastguard Workername: better-parens-1b 13043*7c356e86SAndroid Build Coastguard Workerdescription: 13044*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13045*7c356e86SAndroid Build Coastguard Workerstdin: 13046*7c356e86SAndroid Build Coastguard Worker echo $( (echo fubar)|tr u x) $? 13047*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13048*7c356e86SAndroid Build Coastguard Worker fxbar 0 13049*7c356e86SAndroid Build Coastguard Worker--- 13050*7c356e86SAndroid Build Coastguard Workername: better-parens-1c 13051*7c356e86SAndroid Build Coastguard Workerdescription: 13052*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13053*7c356e86SAndroid Build Coastguard Workerstdin: 13054*7c356e86SAndroid Build Coastguard Worker x=$( (echo fubar)|tr u x); echo $x $? 13055*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13056*7c356e86SAndroid Build Coastguard Worker fxbar 0 13057*7c356e86SAndroid Build Coastguard Worker--- 13058*7c356e86SAndroid Build Coastguard Workername: better-parens-2a 13059*7c356e86SAndroid Build Coastguard Workerdescription: 13060*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13061*7c356e86SAndroid Build Coastguard Workerstdin: 13062*7c356e86SAndroid Build Coastguard Worker if ((echo fubar)|tr u x); then 13063*7c356e86SAndroid Build Coastguard Worker echo ja 13064*7c356e86SAndroid Build Coastguard Worker else 13065*7c356e86SAndroid Build Coastguard Worker echo nein 13066*7c356e86SAndroid Build Coastguard Worker fi 13067*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13068*7c356e86SAndroid Build Coastguard Worker fxbar 13069*7c356e86SAndroid Build Coastguard Worker ja 13070*7c356e86SAndroid Build Coastguard Worker--- 13071*7c356e86SAndroid Build Coastguard Workername: better-parens-2b 13072*7c356e86SAndroid Build Coastguard Workerdescription: 13073*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13074*7c356e86SAndroid Build Coastguard Workerstdin: 13075*7c356e86SAndroid Build Coastguard Worker echo $((echo fubar)|tr u x) $? 13076*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13077*7c356e86SAndroid Build Coastguard Worker fxbar 0 13078*7c356e86SAndroid Build Coastguard Worker--- 13079*7c356e86SAndroid Build Coastguard Workername: better-parens-2c 13080*7c356e86SAndroid Build Coastguard Workerdescription: 13081*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13082*7c356e86SAndroid Build Coastguard Workerstdin: 13083*7c356e86SAndroid Build Coastguard Worker x=$((echo fubar)|tr u x); echo $x $? 13084*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13085*7c356e86SAndroid Build Coastguard Worker fxbar 0 13086*7c356e86SAndroid Build Coastguard Worker--- 13087*7c356e86SAndroid Build Coastguard Workername: better-parens-3a 13088*7c356e86SAndroid Build Coastguard Workerdescription: 13089*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13090*7c356e86SAndroid Build Coastguard Workerstdin: 13091*7c356e86SAndroid Build Coastguard Worker if ( (echo fubar)|(tr u x)); then 13092*7c356e86SAndroid Build Coastguard Worker echo ja 13093*7c356e86SAndroid Build Coastguard Worker else 13094*7c356e86SAndroid Build Coastguard Worker echo nein 13095*7c356e86SAndroid Build Coastguard Worker fi 13096*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13097*7c356e86SAndroid Build Coastguard Worker fxbar 13098*7c356e86SAndroid Build Coastguard Worker ja 13099*7c356e86SAndroid Build Coastguard Worker--- 13100*7c356e86SAndroid Build Coastguard Workername: better-parens-3b 13101*7c356e86SAndroid Build Coastguard Workerdescription: 13102*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13103*7c356e86SAndroid Build Coastguard Workerstdin: 13104*7c356e86SAndroid Build Coastguard Worker echo $( (echo fubar)|(tr u x)) $? 13105*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13106*7c356e86SAndroid Build Coastguard Worker fxbar 0 13107*7c356e86SAndroid Build Coastguard Worker--- 13108*7c356e86SAndroid Build Coastguard Workername: better-parens-3c 13109*7c356e86SAndroid Build Coastguard Workerdescription: 13110*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13111*7c356e86SAndroid Build Coastguard Workerstdin: 13112*7c356e86SAndroid Build Coastguard Worker x=$( (echo fubar)|(tr u x)); echo $x $? 13113*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13114*7c356e86SAndroid Build Coastguard Worker fxbar 0 13115*7c356e86SAndroid Build Coastguard Worker--- 13116*7c356e86SAndroid Build Coastguard Workername: better-parens-4a 13117*7c356e86SAndroid Build Coastguard Workerdescription: 13118*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13119*7c356e86SAndroid Build Coastguard Workerstdin: 13120*7c356e86SAndroid Build Coastguard Worker if ((echo fubar)|(tr u x)); then 13121*7c356e86SAndroid Build Coastguard Worker echo ja 13122*7c356e86SAndroid Build Coastguard Worker else 13123*7c356e86SAndroid Build Coastguard Worker echo nein 13124*7c356e86SAndroid Build Coastguard Worker fi 13125*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13126*7c356e86SAndroid Build Coastguard Worker fxbar 13127*7c356e86SAndroid Build Coastguard Worker ja 13128*7c356e86SAndroid Build Coastguard Worker--- 13129*7c356e86SAndroid Build Coastguard Workername: better-parens-4b 13130*7c356e86SAndroid Build Coastguard Workerdescription: 13131*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13132*7c356e86SAndroid Build Coastguard Workerstdin: 13133*7c356e86SAndroid Build Coastguard Worker echo $((echo fubar)|(tr u x)) $? 13134*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13135*7c356e86SAndroid Build Coastguard Worker fxbar 0 13136*7c356e86SAndroid Build Coastguard Worker--- 13137*7c356e86SAndroid Build Coastguard Workername: better-parens-4c 13138*7c356e86SAndroid Build Coastguard Workerdescription: 13139*7c356e86SAndroid Build Coastguard Worker Check support for ((…)) and $((…)) vs (…) and $(…) 13140*7c356e86SAndroid Build Coastguard Workerstdin: 13141*7c356e86SAndroid Build Coastguard Worker x=$((echo fubar)|(tr u x)); echo $x $? 13142*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13143*7c356e86SAndroid Build Coastguard Worker fxbar 0 13144*7c356e86SAndroid Build Coastguard Worker--- 13145*7c356e86SAndroid Build Coastguard Workername: better-parens-5 13146*7c356e86SAndroid Build Coastguard Workerdescription: 13147*7c356e86SAndroid Build Coastguard Worker Another corner case 13148*7c356e86SAndroid Build Coastguard Workerstdin: 13149*7c356e86SAndroid Build Coastguard Worker ( (echo 'fo o$bar' "baz\$bla\"" m\$eh) | tr a A) 13150*7c356e86SAndroid Build Coastguard Worker ((echo 'fo o$bar' "baz\$bla\"" m\$eh) | tr a A) 13151*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13152*7c356e86SAndroid Build Coastguard Worker fo o$bAr bAz$blA" m$eh 13153*7c356e86SAndroid Build Coastguard Worker fo o$bAr bAz$blA" m$eh 13154*7c356e86SAndroid Build Coastguard Worker--- 13155*7c356e86SAndroid Build Coastguard Workername: echo-test-1 13156*7c356e86SAndroid Build Coastguard Workerdescription: 13157*7c356e86SAndroid Build Coastguard Worker Test what the echo builtin does (mksh) 13158*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-yes 13159*7c356e86SAndroid Build Coastguard Workerstdin: 13160*7c356e86SAndroid Build Coastguard Worker echo -n 'foo\x40bar' 13161*7c356e86SAndroid Build Coastguard Worker echo -e '\tbaz' 13162*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13163*7c356e86SAndroid Build Coastguard Worker foo@bar baz 13164*7c356e86SAndroid Build Coastguard Worker--- 13165*7c356e86SAndroid Build Coastguard Workername: echo-test-1-ebcdic 13166*7c356e86SAndroid Build Coastguard Workerdescription: 13167*7c356e86SAndroid Build Coastguard Worker Test what the echo builtin does (mksh) 13168*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no 13169*7c356e86SAndroid Build Coastguard Workerstdin: 13170*7c356e86SAndroid Build Coastguard Worker echo -n 'foo\x7Cbar' 13171*7c356e86SAndroid Build Coastguard Worker echo -e '\tbaz' 13172*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13173*7c356e86SAndroid Build Coastguard Worker foo@bar baz 13174*7c356e86SAndroid Build Coastguard Worker--- 13175*7c356e86SAndroid Build Coastguard Workername: echo-test-2 13176*7c356e86SAndroid Build Coastguard Workerdescription: 13177*7c356e86SAndroid Build Coastguard Worker Test what the echo builtin does (POSIX) 13178*7c356e86SAndroid Build Coastguard Worker Note: this follows Debian Policy 10.4 which mandates 13179*7c356e86SAndroid Build Coastguard Worker that -n shall be treated as an option, not XSI which 13180*7c356e86SAndroid Build Coastguard Worker mandates it shall be treated as string but escapes 13181*7c356e86SAndroid Build Coastguard Worker shall be expanded. 13182*7c356e86SAndroid Build Coastguard Workerstdin: 13183*7c356e86SAndroid Build Coastguard Worker test -n "$POSH_VERSION" || set -o posix 13184*7c356e86SAndroid Build Coastguard Worker echo -n 'foo\x40bar' 13185*7c356e86SAndroid Build Coastguard Worker echo -e '\tbaz' 13186*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13187*7c356e86SAndroid Build Coastguard Worker foo\x40bar-e \tbaz 13188*7c356e86SAndroid Build Coastguard Worker--- 13189*7c356e86SAndroid Build Coastguard Workername: echo-test-3-mnbsd 13190*7c356e86SAndroid Build Coastguard Workerdescription: 13191*7c356e86SAndroid Build Coastguard Worker Test what the echo builtin does, and test a compatibility flag. 13192*7c356e86SAndroid Build Coastguard Workercategory: mnbsdash 13193*7c356e86SAndroid Build Coastguard Workerstdin: 13194*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'echo -n 1=\\x40$1; echo -e \\x2E' -- foo bar 13195*7c356e86SAndroid Build Coastguard Worker "$__progname" -o posix -c 'echo -n 2=\\x40$1; echo -e \\x2E' -- foo bar 13196*7c356e86SAndroid Build Coastguard Worker "$__progname" -o sh -c 'echo -n 3=\\x40$1; echo -e \\x2E' -- foo bar 13197*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13198*7c356e86SAndroid Build Coastguard Worker 1=@foo. 13199*7c356e86SAndroid Build Coastguard Worker 2=\x40foo-e \x2E 13200*7c356e86SAndroid Build Coastguard Worker 3=\x40bar. 13201*7c356e86SAndroid Build Coastguard Worker--- 13202*7c356e86SAndroid Build Coastguard Workername: echo-test-3-normal 13203*7c356e86SAndroid Build Coastguard Workerdescription: 13204*7c356e86SAndroid Build Coastguard Worker Test what the echo builtin does, and test a compatibility flag. 13205*7c356e86SAndroid Build Coastguard Workercategory: !mnbsdash,!shell:ebcdic-yes 13206*7c356e86SAndroid Build Coastguard Workerstdin: 13207*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'echo -n 1=\\x40$1; echo -e \\x2E' -- foo bar 13208*7c356e86SAndroid Build Coastguard Worker "$__progname" -o posix -c 'echo -n 2=\\x40$1; echo -e \\x2E' -- foo bar 13209*7c356e86SAndroid Build Coastguard Worker "$__progname" -o sh -c 'echo -n 3=\\x40$1; echo -e \\x2E' -- foo bar 13210*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13211*7c356e86SAndroid Build Coastguard Worker 1=@foo. 13212*7c356e86SAndroid Build Coastguard Worker 2=\x40foo-e \x2E 13213*7c356e86SAndroid Build Coastguard Worker 3=\x40foo-e \x2E 13214*7c356e86SAndroid Build Coastguard Worker--- 13215*7c356e86SAndroid Build Coastguard Workername: echo-test-3-ebcdic 13216*7c356e86SAndroid Build Coastguard Workerdescription: 13217*7c356e86SAndroid Build Coastguard Worker Test what the echo builtin does, and test a compatibility flag. 13218*7c356e86SAndroid Build Coastguard Workercategory: !mnbsdash,!shell:ebcdic-no 13219*7c356e86SAndroid Build Coastguard Workerstdin: 13220*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'echo -n 1=\\x7C$1; echo -e \\x4B' -- foo bar 13221*7c356e86SAndroid Build Coastguard Worker "$__progname" -o posix -c 'echo -n 2=\\x7C$1; echo -e \\x4B' -- foo bar 13222*7c356e86SAndroid Build Coastguard Worker "$__progname" -o sh -c 'echo -n 3=\\x7C$1; echo -e \\x4B' -- foo bar 13223*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13224*7c356e86SAndroid Build Coastguard Worker 1=@foo. 13225*7c356e86SAndroid Build Coastguard Worker 2=\x7Cfoo-e \x4B 13226*7c356e86SAndroid Build Coastguard Worker 3=\x7Cfoo-e \x4B 13227*7c356e86SAndroid Build Coastguard Worker--- 13228*7c356e86SAndroid Build Coastguard Workername: utilities-getopts-1 13229*7c356e86SAndroid Build Coastguard Workerdescription: 13230*7c356e86SAndroid Build Coastguard Worker getopts sets OPTIND correctly for unparsed option 13231*7c356e86SAndroid Build Coastguard Workerstdin: 13232*7c356e86SAndroid Build Coastguard Worker set -- -a -a -x 13233*7c356e86SAndroid Build Coastguard Worker while getopts :a optc; do 13234*7c356e86SAndroid Build Coastguard Worker echo "OPTARG=$OPTARG, OPTIND=$OPTIND, optc=$optc." 13235*7c356e86SAndroid Build Coastguard Worker done 13236*7c356e86SAndroid Build Coastguard Worker echo done 13237*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13238*7c356e86SAndroid Build Coastguard Worker OPTARG=, OPTIND=2, optc=a. 13239*7c356e86SAndroid Build Coastguard Worker OPTARG=, OPTIND=3, optc=a. 13240*7c356e86SAndroid Build Coastguard Worker OPTARG=x, OPTIND=4, optc=?. 13241*7c356e86SAndroid Build Coastguard Worker done 13242*7c356e86SAndroid Build Coastguard Worker--- 13243*7c356e86SAndroid Build Coastguard Workername: utilities-getopts-2 13244*7c356e86SAndroid Build Coastguard Workerdescription: 13245*7c356e86SAndroid Build Coastguard Worker Check OPTARG 13246*7c356e86SAndroid Build Coastguard Workerstdin: 13247*7c356e86SAndroid Build Coastguard Worker set -- -a Mary -x 13248*7c356e86SAndroid Build Coastguard Worker while getopts a: optc; do 13249*7c356e86SAndroid Build Coastguard Worker echo "OPTARG=$OPTARG, OPTIND=$OPTIND, optc=$optc." 13250*7c356e86SAndroid Build Coastguard Worker done 13251*7c356e86SAndroid Build Coastguard Worker echo done 13252*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13253*7c356e86SAndroid Build Coastguard Worker OPTARG=Mary, OPTIND=3, optc=a. 13254*7c356e86SAndroid Build Coastguard Worker OPTARG=, OPTIND=4, optc=?. 13255*7c356e86SAndroid Build Coastguard Worker done 13256*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: /.*-x.*option/ 13257*7c356e86SAndroid Build Coastguard Worker--- 13258*7c356e86SAndroid Build Coastguard Workername: utilities-getopts-3 13259*7c356e86SAndroid Build Coastguard Workerdescription: 13260*7c356e86SAndroid Build Coastguard Worker Check unsetting OPTARG 13261*7c356e86SAndroid Build Coastguard Workerstdin: 13262*7c356e86SAndroid Build Coastguard Worker set -- -x arg -y 13263*7c356e86SAndroid Build Coastguard Worker getopts x:y opt && echo "${OPTARG-unset}" 13264*7c356e86SAndroid Build Coastguard Worker getopts x:y opt && echo "${OPTARG-unset}" 13265*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13266*7c356e86SAndroid Build Coastguard Worker arg 13267*7c356e86SAndroid Build Coastguard Worker unset 13268*7c356e86SAndroid Build Coastguard Worker--- 13269*7c356e86SAndroid Build Coastguard Workername: wcswidth-1 13270*7c356e86SAndroid Build Coastguard Workerdescription: 13271*7c356e86SAndroid Build Coastguard Worker Check the new wcswidth feature 13272*7c356e86SAndroid Build Coastguard Workerstdin: 13273*7c356e86SAndroid Build Coastguard Worker s=何 13274*7c356e86SAndroid Build Coastguard Worker set +U 13275*7c356e86SAndroid Build Coastguard Worker print octets: ${#s} . 13276*7c356e86SAndroid Build Coastguard Worker print 8-bit width: ${%s} . 13277*7c356e86SAndroid Build Coastguard Worker set -U 13278*7c356e86SAndroid Build Coastguard Worker print characters: ${#s} . 13279*7c356e86SAndroid Build Coastguard Worker print columns: ${%s} . 13280*7c356e86SAndroid Build Coastguard Worker s=� 13281*7c356e86SAndroid Build Coastguard Worker set +U 13282*7c356e86SAndroid Build Coastguard Worker print octets: ${#s} . 13283*7c356e86SAndroid Build Coastguard Worker print 8-bit width: ${%s} . 13284*7c356e86SAndroid Build Coastguard Worker set -U 13285*7c356e86SAndroid Build Coastguard Worker print characters: ${#s} . 13286*7c356e86SAndroid Build Coastguard Worker print columns: ${%s} . 13287*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13288*7c356e86SAndroid Build Coastguard Worker octets: 3 . 13289*7c356e86SAndroid Build Coastguard Worker 8-bit width: -1 . 13290*7c356e86SAndroid Build Coastguard Worker characters: 1 . 13291*7c356e86SAndroid Build Coastguard Worker columns: 2 . 13292*7c356e86SAndroid Build Coastguard Worker octets: 3 . 13293*7c356e86SAndroid Build Coastguard Worker 8-bit width: 3 . 13294*7c356e86SAndroid Build Coastguard Worker characters: 1 . 13295*7c356e86SAndroid Build Coastguard Worker columns: 1 . 13296*7c356e86SAndroid Build Coastguard Worker--- 13297*7c356e86SAndroid Build Coastguard Workername: wcswidth-2 13298*7c356e86SAndroid Build Coastguard Workerdescription: 13299*7c356e86SAndroid Build Coastguard Worker Check some corner cases 13300*7c356e86SAndroid Build Coastguard Workerstdin: 13301*7c356e86SAndroid Build Coastguard Worker print % $% . 13302*7c356e86SAndroid Build Coastguard Worker set -U 13303*7c356e86SAndroid Build Coastguard Worker x='a b' 13304*7c356e86SAndroid Build Coastguard Worker print c ${%x} . 13305*7c356e86SAndroid Build Coastguard Worker set +U 13306*7c356e86SAndroid Build Coastguard Worker x='a b' 13307*7c356e86SAndroid Build Coastguard Worker print d ${%x} . 13308*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13309*7c356e86SAndroid Build Coastguard Worker % $% . 13310*7c356e86SAndroid Build Coastguard Worker c -1 . 13311*7c356e86SAndroid Build Coastguard Worker d -1 . 13312*7c356e86SAndroid Build Coastguard Worker--- 13313*7c356e86SAndroid Build Coastguard Workername: wcswidth-3 13314*7c356e86SAndroid Build Coastguard Workerdescription: 13315*7c356e86SAndroid Build Coastguard Worker Check some corner cases 13316*7c356e86SAndroid Build Coastguard Workerstdin: 13317*7c356e86SAndroid Build Coastguard Worker print ${%} . 13318*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 13319*7c356e86SAndroid Build Coastguard Worker /bad substitution/ 13320*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 13321*7c356e86SAndroid Build Coastguard Worker--- 13322*7c356e86SAndroid Build Coastguard Workername: wcswidth-4a 13323*7c356e86SAndroid Build Coastguard Workerdescription: 13324*7c356e86SAndroid Build Coastguard Worker Check some corner cases 13325*7c356e86SAndroid Build Coastguard Workerstdin: 13326*7c356e86SAndroid Build Coastguard Worker print ${%*} . 13327*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 13328*7c356e86SAndroid Build Coastguard Worker /bad substitution/ 13329*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 13330*7c356e86SAndroid Build Coastguard Worker--- 13331*7c356e86SAndroid Build Coastguard Workername: wcswidth-4b 13332*7c356e86SAndroid Build Coastguard Workerdescription: 13333*7c356e86SAndroid Build Coastguard Worker Check some corner cases 13334*7c356e86SAndroid Build Coastguard Workerstdin: 13335*7c356e86SAndroid Build Coastguard Worker print ${%@} . 13336*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 13337*7c356e86SAndroid Build Coastguard Worker /bad substitution/ 13338*7c356e86SAndroid Build Coastguard Workerexpected-exit: 1 13339*7c356e86SAndroid Build Coastguard Worker--- 13340*7c356e86SAndroid Build Coastguard Workername: wcswidth-4c 13341*7c356e86SAndroid Build Coastguard Workerdescription: 13342*7c356e86SAndroid Build Coastguard Worker Check some corner cases 13343*7c356e86SAndroid Build Coastguard Workerstdin: 13344*7c356e86SAndroid Build Coastguard Worker : 13345*7c356e86SAndroid Build Coastguard Worker print ${%?} . 13346*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13347*7c356e86SAndroid Build Coastguard Worker 1 . 13348*7c356e86SAndroid Build Coastguard Worker--- 13349*7c356e86SAndroid Build Coastguard Workername: realpath-1 13350*7c356e86SAndroid Build Coastguard Workerdescription: 13351*7c356e86SAndroid Build Coastguard Worker Check proper return values for realpath 13352*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd 13353*7c356e86SAndroid Build Coastguard Workerstdin: 13354*7c356e86SAndroid Build Coastguard Worker wd=$(realpath .) 13355*7c356e86SAndroid Build Coastguard Worker mkdir dir 13356*7c356e86SAndroid Build Coastguard Worker :>file 13357*7c356e86SAndroid Build Coastguard Worker :>dir/file 13358*7c356e86SAndroid Build Coastguard Worker ln -s dir lndir 13359*7c356e86SAndroid Build Coastguard Worker ln -s file lnfile 13360*7c356e86SAndroid Build Coastguard Worker ln -s nix lnnix 13361*7c356e86SAndroid Build Coastguard Worker ln -s . lnself 13362*7c356e86SAndroid Build Coastguard Worker i=0 13363*7c356e86SAndroid Build Coastguard Worker chk() { 13364*7c356e86SAndroid Build Coastguard Worker typeset x y 13365*7c356e86SAndroid Build Coastguard Worker x=$(realpath "$wd/$1" 2>&1); y=$? 13366*7c356e86SAndroid Build Coastguard Worker print $((++i)) "?$1" =${x##*$wd/} !$y 13367*7c356e86SAndroid Build Coastguard Worker } 13368*7c356e86SAndroid Build Coastguard Worker chk dir 13369*7c356e86SAndroid Build Coastguard Worker chk dir/ 13370*7c356e86SAndroid Build Coastguard Worker chk dir/file 13371*7c356e86SAndroid Build Coastguard Worker chk dir/nix 13372*7c356e86SAndroid Build Coastguard Worker chk file 13373*7c356e86SAndroid Build Coastguard Worker chk file/ 13374*7c356e86SAndroid Build Coastguard Worker chk file/file 13375*7c356e86SAndroid Build Coastguard Worker chk file/nix 13376*7c356e86SAndroid Build Coastguard Worker chk nix 13377*7c356e86SAndroid Build Coastguard Worker chk nix/ 13378*7c356e86SAndroid Build Coastguard Worker chk nix/file 13379*7c356e86SAndroid Build Coastguard Worker chk nix/nix 13380*7c356e86SAndroid Build Coastguard Worker chk lndir 13381*7c356e86SAndroid Build Coastguard Worker chk lndir/ 13382*7c356e86SAndroid Build Coastguard Worker chk lndir/file 13383*7c356e86SAndroid Build Coastguard Worker chk lndir/nix 13384*7c356e86SAndroid Build Coastguard Worker chk lnfile 13385*7c356e86SAndroid Build Coastguard Worker chk lnfile/ 13386*7c356e86SAndroid Build Coastguard Worker chk lnfile/file 13387*7c356e86SAndroid Build Coastguard Worker chk lnfile/nix 13388*7c356e86SAndroid Build Coastguard Worker chk lnnix 13389*7c356e86SAndroid Build Coastguard Worker chk lnnix/ 13390*7c356e86SAndroid Build Coastguard Worker chk lnnix/file 13391*7c356e86SAndroid Build Coastguard Worker chk lnnix/nix 13392*7c356e86SAndroid Build Coastguard Worker chk lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself 13393*7c356e86SAndroid Build Coastguard Worker rm lnself 13394*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13395*7c356e86SAndroid Build Coastguard Worker 1 ?dir =dir !0 13396*7c356e86SAndroid Build Coastguard Worker 2 ?dir/ =dir !0 13397*7c356e86SAndroid Build Coastguard Worker 3 ?dir/file =dir/file !0 13398*7c356e86SAndroid Build Coastguard Worker 4 ?dir/nix =dir/nix !0 13399*7c356e86SAndroid Build Coastguard Worker 5 ?file =file !0 13400*7c356e86SAndroid Build Coastguard Worker 6 ?file/ =file/: Not a directory !20 13401*7c356e86SAndroid Build Coastguard Worker 7 ?file/file =file/file: Not a directory !20 13402*7c356e86SAndroid Build Coastguard Worker 8 ?file/nix =file/nix: Not a directory !20 13403*7c356e86SAndroid Build Coastguard Worker 9 ?nix =nix !0 13404*7c356e86SAndroid Build Coastguard Worker 10 ?nix/ =nix !0 13405*7c356e86SAndroid Build Coastguard Worker 11 ?nix/file =nix/file: No such file or directory !2 13406*7c356e86SAndroid Build Coastguard Worker 12 ?nix/nix =nix/nix: No such file or directory !2 13407*7c356e86SAndroid Build Coastguard Worker 13 ?lndir =dir !0 13408*7c356e86SAndroid Build Coastguard Worker 14 ?lndir/ =dir !0 13409*7c356e86SAndroid Build Coastguard Worker 15 ?lndir/file =dir/file !0 13410*7c356e86SAndroid Build Coastguard Worker 16 ?lndir/nix =dir/nix !0 13411*7c356e86SAndroid Build Coastguard Worker 17 ?lnfile =file !0 13412*7c356e86SAndroid Build Coastguard Worker 18 ?lnfile/ =lnfile/: Not a directory !20 13413*7c356e86SAndroid Build Coastguard Worker 19 ?lnfile/file =lnfile/file: Not a directory !20 13414*7c356e86SAndroid Build Coastguard Worker 20 ?lnfile/nix =lnfile/nix: Not a directory !20 13415*7c356e86SAndroid Build Coastguard Worker 21 ?lnnix =nix !0 13416*7c356e86SAndroid Build Coastguard Worker 22 ?lnnix/ =nix !0 13417*7c356e86SAndroid Build Coastguard Worker 23 ?lnnix/file =lnnix/file: No such file or directory !2 13418*7c356e86SAndroid Build Coastguard Worker 24 ?lnnix/nix =lnnix/nix: No such file or directory !2 13419*7c356e86SAndroid Build Coastguard Worker 25 ?lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself =lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself/lnself: Too many levels of symbolic links !62 13420*7c356e86SAndroid Build Coastguard Worker--- 13421*7c356e86SAndroid Build Coastguard Workername: realpath-2 13422*7c356e86SAndroid Build Coastguard Workerdescription: 13423*7c356e86SAndroid Build Coastguard Worker Ensure that exactly two leading slashes are not collapsed 13424*7c356e86SAndroid Build Coastguard Worker POSIX guarantees this exception, e.g. for UNC paths on Cygwin 13425*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd 13426*7c356e86SAndroid Build Coastguard Workerstdin: 13427*7c356e86SAndroid Build Coastguard Worker ln -s /bin t1 13428*7c356e86SAndroid Build Coastguard Worker ln -s //bin t2 13429*7c356e86SAndroid Build Coastguard Worker ln -s ///bin t3 13430*7c356e86SAndroid Build Coastguard Worker realpath /bin 13431*7c356e86SAndroid Build Coastguard Worker realpath //bin 13432*7c356e86SAndroid Build Coastguard Worker realpath ///bin 13433*7c356e86SAndroid Build Coastguard Worker realpath /usr/bin 13434*7c356e86SAndroid Build Coastguard Worker realpath /usr//bin 13435*7c356e86SAndroid Build Coastguard Worker realpath /usr///bin 13436*7c356e86SAndroid Build Coastguard Worker realpath t1 13437*7c356e86SAndroid Build Coastguard Worker realpath t2 13438*7c356e86SAndroid Build Coastguard Worker realpath t3 13439*7c356e86SAndroid Build Coastguard Worker rm -f t1 t2 t3 13440*7c356e86SAndroid Build Coastguard Worker cd //usr/bin 13441*7c356e86SAndroid Build Coastguard Worker pwd 13442*7c356e86SAndroid Build Coastguard Worker cd ../lib 13443*7c356e86SAndroid Build Coastguard Worker pwd 13444*7c356e86SAndroid Build Coastguard Worker realpath //usr/include/../bin 13445*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13446*7c356e86SAndroid Build Coastguard Worker /bin 13447*7c356e86SAndroid Build Coastguard Worker //bin 13448*7c356e86SAndroid Build Coastguard Worker /bin 13449*7c356e86SAndroid Build Coastguard Worker /usr/bin 13450*7c356e86SAndroid Build Coastguard Worker /usr/bin 13451*7c356e86SAndroid Build Coastguard Worker /usr/bin 13452*7c356e86SAndroid Build Coastguard Worker /bin 13453*7c356e86SAndroid Build Coastguard Worker //bin 13454*7c356e86SAndroid Build Coastguard Worker /bin 13455*7c356e86SAndroid Build Coastguard Worker //usr/bin 13456*7c356e86SAndroid Build Coastguard Worker //usr/lib 13457*7c356e86SAndroid Build Coastguard Worker //usr/bin 13458*7c356e86SAndroid Build Coastguard Worker--- 13459*7c356e86SAndroid Build Coastguard Workername: crash-1 13460*7c356e86SAndroid Build Coastguard Workerdescription: 13461*7c356e86SAndroid Build Coastguard Worker Crashed during March 2011, fixed on vernal equinōx ☺ 13462*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd,os:openbsd 13463*7c356e86SAndroid Build Coastguard Workerstdin: 13464*7c356e86SAndroid Build Coastguard Worker export MALLOC_OPTIONS=FGJRSX 13465*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'x=$(tr z r <<<baz); echo $x' 13466*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13467*7c356e86SAndroid Build Coastguard Worker bar 13468*7c356e86SAndroid Build Coastguard Worker--- 13469*7c356e86SAndroid Build Coastguard Workername: debian-117-1 13470*7c356e86SAndroid Build Coastguard Workerdescription: 13471*7c356e86SAndroid Build Coastguard Worker Check test - bug#465250 13472*7c356e86SAndroid Build Coastguard Workerstdin: 13473*7c356e86SAndroid Build Coastguard Worker test \( ! -e \) ; echo $? 13474*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13475*7c356e86SAndroid Build Coastguard Worker 1 13476*7c356e86SAndroid Build Coastguard Worker--- 13477*7c356e86SAndroid Build Coastguard Workername: debian-117-2 13478*7c356e86SAndroid Build Coastguard Workerdescription: 13479*7c356e86SAndroid Build Coastguard Worker Check test - bug#465250 13480*7c356e86SAndroid Build Coastguard Workerstdin: 13481*7c356e86SAndroid Build Coastguard Worker test \( -e \) ; echo $? 13482*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13483*7c356e86SAndroid Build Coastguard Worker 0 13484*7c356e86SAndroid Build Coastguard Worker--- 13485*7c356e86SAndroid Build Coastguard Workername: debian-117-3 13486*7c356e86SAndroid Build Coastguard Workerdescription: 13487*7c356e86SAndroid Build Coastguard Worker Check test - bug#465250 13488*7c356e86SAndroid Build Coastguard Workerstdin: 13489*7c356e86SAndroid Build Coastguard Worker test ! -e ; echo $? 13490*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13491*7c356e86SAndroid Build Coastguard Worker 1 13492*7c356e86SAndroid Build Coastguard Worker--- 13493*7c356e86SAndroid Build Coastguard Workername: debian-117-4 13494*7c356e86SAndroid Build Coastguard Workerdescription: 13495*7c356e86SAndroid Build Coastguard Worker Check test - bug#465250 13496*7c356e86SAndroid Build Coastguard Workerstdin: 13497*7c356e86SAndroid Build Coastguard Worker test -e ; echo $? 13498*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13499*7c356e86SAndroid Build Coastguard Worker 0 13500*7c356e86SAndroid Build Coastguard Worker--- 13501*7c356e86SAndroid Build Coastguard Workername: case-zsh 13502*7c356e86SAndroid Build Coastguard Workerdescription: 13503*7c356e86SAndroid Build Coastguard Worker Check that zsh case variants work 13504*7c356e86SAndroid Build Coastguard Workerstdin: 13505*7c356e86SAndroid Build Coastguard Worker case 'b' in 13506*7c356e86SAndroid Build Coastguard Worker a) echo a ;; 13507*7c356e86SAndroid Build Coastguard Worker b) echo b ;; 13508*7c356e86SAndroid Build Coastguard Worker c) echo c ;; 13509*7c356e86SAndroid Build Coastguard Worker *) echo x ;; 13510*7c356e86SAndroid Build Coastguard Worker esac 13511*7c356e86SAndroid Build Coastguard Worker echo = 13512*7c356e86SAndroid Build Coastguard Worker case 'b' in 13513*7c356e86SAndroid Build Coastguard Worker a) echo a ;& 13514*7c356e86SAndroid Build Coastguard Worker b) echo b ;& 13515*7c356e86SAndroid Build Coastguard Worker c) echo c ;& 13516*7c356e86SAndroid Build Coastguard Worker *) echo x ;& 13517*7c356e86SAndroid Build Coastguard Worker esac 13518*7c356e86SAndroid Build Coastguard Worker echo = 13519*7c356e86SAndroid Build Coastguard Worker case 'b' in 13520*7c356e86SAndroid Build Coastguard Worker a) echo a ;| 13521*7c356e86SAndroid Build Coastguard Worker b) echo b ;| 13522*7c356e86SAndroid Build Coastguard Worker c) echo c ;| 13523*7c356e86SAndroid Build Coastguard Worker *) echo x ;| 13524*7c356e86SAndroid Build Coastguard Worker esac 13525*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13526*7c356e86SAndroid Build Coastguard Worker b 13527*7c356e86SAndroid Build Coastguard Worker = 13528*7c356e86SAndroid Build Coastguard Worker b 13529*7c356e86SAndroid Build Coastguard Worker c 13530*7c356e86SAndroid Build Coastguard Worker x 13531*7c356e86SAndroid Build Coastguard Worker = 13532*7c356e86SAndroid Build Coastguard Worker b 13533*7c356e86SAndroid Build Coastguard Worker x 13534*7c356e86SAndroid Build Coastguard Worker--- 13535*7c356e86SAndroid Build Coastguard Workername: case-braces 13536*7c356e86SAndroid Build Coastguard Workerdescription: 13537*7c356e86SAndroid Build Coastguard Worker Check that case end tokens are not mixed up (Debian #220272) 13538*7c356e86SAndroid Build Coastguard Workerstdin: 13539*7c356e86SAndroid Build Coastguard Worker i=0 13540*7c356e86SAndroid Build Coastguard Worker for value in 'x' '}' 'esac'; do 13541*7c356e86SAndroid Build Coastguard Worker print -n "$((++i))($value)bourne " 13542*7c356e86SAndroid Build Coastguard Worker case $value in 13543*7c356e86SAndroid Build Coastguard Worker }) echo brace ;; 13544*7c356e86SAndroid Build Coastguard Worker *) echo no ;; 13545*7c356e86SAndroid Build Coastguard Worker esac 13546*7c356e86SAndroid Build Coastguard Worker print -n "$((++i))($value)korn " 13547*7c356e86SAndroid Build Coastguard Worker case $value { 13548*7c356e86SAndroid Build Coastguard Worker esac) echo esac ;; 13549*7c356e86SAndroid Build Coastguard Worker *) echo no ;; 13550*7c356e86SAndroid Build Coastguard Worker } 13551*7c356e86SAndroid Build Coastguard Worker done 13552*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13553*7c356e86SAndroid Build Coastguard Worker 1(x)bourne no 13554*7c356e86SAndroid Build Coastguard Worker 2(x)korn no 13555*7c356e86SAndroid Build Coastguard Worker 3(})bourne brace 13556*7c356e86SAndroid Build Coastguard Worker 4(})korn no 13557*7c356e86SAndroid Build Coastguard Worker 5(esac)bourne no 13558*7c356e86SAndroid Build Coastguard Worker 6(esac)korn esac 13559*7c356e86SAndroid Build Coastguard Worker--- 13560*7c356e86SAndroid Build Coastguard Workername: command-shift 13561*7c356e86SAndroid Build Coastguard Workerdescription: 13562*7c356e86SAndroid Build Coastguard Worker Check that 'command shift' works 13563*7c356e86SAndroid Build Coastguard Workerstdin: 13564*7c356e86SAndroid Build Coastguard Worker function snc { 13565*7c356e86SAndroid Build Coastguard Worker echo "before 0='$0' 1='$1' 2='$2'" 13566*7c356e86SAndroid Build Coastguard Worker shift 13567*7c356e86SAndroid Build Coastguard Worker echo "after 0='$0' 1='$1' 2='$2'" 13568*7c356e86SAndroid Build Coastguard Worker } 13569*7c356e86SAndroid Build Coastguard Worker function swc { 13570*7c356e86SAndroid Build Coastguard Worker echo "before 0='$0' 1='$1' 2='$2'" 13571*7c356e86SAndroid Build Coastguard Worker command shift 13572*7c356e86SAndroid Build Coastguard Worker echo "after 0='$0' 1='$1' 2='$2'" 13573*7c356e86SAndroid Build Coastguard Worker } 13574*7c356e86SAndroid Build Coastguard Worker echo = without command 13575*7c356e86SAndroid Build Coastguard Worker snc 一 二 13576*7c356e86SAndroid Build Coastguard Worker echo = with command 13577*7c356e86SAndroid Build Coastguard Worker swc 一 二 13578*7c356e86SAndroid Build Coastguard Worker echo = done 13579*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13580*7c356e86SAndroid Build Coastguard Worker = without command 13581*7c356e86SAndroid Build Coastguard Worker before 0='snc' 1='一' 2='二' 13582*7c356e86SAndroid Build Coastguard Worker after 0='snc' 1='二' 2='' 13583*7c356e86SAndroid Build Coastguard Worker = with command 13584*7c356e86SAndroid Build Coastguard Worker before 0='swc' 1='一' 2='二' 13585*7c356e86SAndroid Build Coastguard Worker after 0='swc' 1='二' 2='' 13586*7c356e86SAndroid Build Coastguard Worker = done 13587*7c356e86SAndroid Build Coastguard Worker--- 13588*7c356e86SAndroid Build Coastguard Workername: command-set 13589*7c356e86SAndroid Build Coastguard Workerdescription: 13590*7c356e86SAndroid Build Coastguard Worker Same but with set 13591*7c356e86SAndroid Build Coastguard Workerstdin: 13592*7c356e86SAndroid Build Coastguard Worker showargs() { for s_arg in "$@"; do echo -n "<$s_arg> "; done; echo .; } 13593*7c356e86SAndroid Build Coastguard Worker showargs 1 "$@" 13594*7c356e86SAndroid Build Coastguard Worker set -- foo bar baz 13595*7c356e86SAndroid Build Coastguard Worker showargs 2 "$@" 13596*7c356e86SAndroid Build Coastguard Worker command set -- miau 'meow nyao' 13597*7c356e86SAndroid Build Coastguard Worker showargs 3 "$@" 13598*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13599*7c356e86SAndroid Build Coastguard Worker <1> . 13600*7c356e86SAndroid Build Coastguard Worker <2> <foo> <bar> <baz> . 13601*7c356e86SAndroid Build Coastguard Worker <3> <miau> <meow nyao> . 13602*7c356e86SAndroid Build Coastguard Worker--- 13603*7c356e86SAndroid Build Coastguard Workername: command-readonly 13604*7c356e86SAndroid Build Coastguard Workerdescription: 13605*7c356e86SAndroid Build Coastguard Worker These should not exit on error when prefixed 13606*7c356e86SAndroid Build Coastguard Workerstdin: 13607*7c356e86SAndroid Build Coastguard Worker exec 2>/dev/null 13608*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'readonly v; export v=foo || echo ok' 13609*7c356e86SAndroid Build Coastguard Worker echo ef=$? 13610*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'readonly v; command export v=foo || echo ok' 13611*7c356e86SAndroid Build Coastguard Worker echo en=$? 13612*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'readonly v; readonly v=foo || echo ok' 13613*7c356e86SAndroid Build Coastguard Worker echo rf=$? 13614*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'readonly v; command readonly v=foo || echo ok' 13615*7c356e86SAndroid Build Coastguard Worker echo rn=$? 13616*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13617*7c356e86SAndroid Build Coastguard Worker ef=2 13618*7c356e86SAndroid Build Coastguard Worker ok 13619*7c356e86SAndroid Build Coastguard Worker en=0 13620*7c356e86SAndroid Build Coastguard Worker rf=2 13621*7c356e86SAndroid Build Coastguard Worker ok 13622*7c356e86SAndroid Build Coastguard Worker rn=0 13623*7c356e86SAndroid Build Coastguard Worker--- 13624*7c356e86SAndroid Build Coastguard Workername: command-dot-regression 13625*7c356e86SAndroid Build Coastguard Workerdescription: 13626*7c356e86SAndroid Build Coastguard Worker Check a regression in fixing the above does not appear 13627*7c356e86SAndroid Build Coastguard Workerstdin: 13628*7c356e86SAndroid Build Coastguard Worker cat >test.mksh <<\EOF 13629*7c356e86SAndroid Build Coastguard Worker set -- one two 13630*7c356e86SAndroid Build Coastguard Worker shift 13631*7c356e86SAndroid Build Coastguard Worker for s_arg in "$#" "$@"; do echo -n "<$s_arg> "; done; echo . 13632*7c356e86SAndroid Build Coastguard Worker EOF 13633*7c356e86SAndroid Build Coastguard Worker "$__progname" -c '. ./test.mksh' dummy oh dear this is not good 13634*7c356e86SAndroid Build Coastguard Worker echo = 13635*7c356e86SAndroid Build Coastguard Worker "$__progname" -c 'command . ./test.mksh' dummy oh dear this is not good 13636*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13637*7c356e86SAndroid Build Coastguard Worker <1> <two> . 13638*7c356e86SAndroid Build Coastguard Worker = 13639*7c356e86SAndroid Build Coastguard Worker <1> <two> . 13640*7c356e86SAndroid Build Coastguard Worker--- 13641*7c356e86SAndroid Build Coastguard Workername: command-pvV-posix-priorities 13642*7c356e86SAndroid Build Coastguard Workerdescription: 13643*7c356e86SAndroid Build Coastguard Worker For POSIX compatibility, command -v should find aliases and reserved 13644*7c356e86SAndroid Build Coastguard Worker words, and command -p[vV] should find aliases, reserved words, and 13645*7c356e86SAndroid Build Coastguard Worker builtins over external commands. 13646*7c356e86SAndroid Build Coastguard Workerstdin: 13647*7c356e86SAndroid Build Coastguard Worker # extra checks prep 13648*7c356e86SAndroid Build Coastguard Worker mkdir mrr 13649*7c356e86SAndroid Build Coastguard Worker :>mrr/miau 13650*7c356e86SAndroid Build Coastguard Worker chmod +x mrr/miau 13651*7c356e86SAndroid Build Coastguard Worker # priorities 13652*7c356e86SAndroid Build Coastguard Worker PATH=/bin:/usr/bin 13653*7c356e86SAndroid Build Coastguard Worker alias foo="bar baz" 13654*7c356e86SAndroid Build Coastguard Worker alias '[ab]=:' 13655*7c356e86SAndroid Build Coastguard Worker bar() { :; } 13656*7c356e86SAndroid Build Coastguard Worker for word in 'if' 'foo' 'bar' 'set' 'true' '[ab]'; do 13657*7c356e86SAndroid Build Coastguard Worker command -v "$word" 13658*7c356e86SAndroid Build Coastguard Worker command -pv "$word" 13659*7c356e86SAndroid Build Coastguard Worker command -V "$word" 13660*7c356e86SAndroid Build Coastguard Worker command -pV "$word" 13661*7c356e86SAndroid Build Coastguard Worker done 13662*7c356e86SAndroid Build Coastguard Worker # extra checks 13663*7c356e86SAndroid Build Coastguard Worker alias '[ab]' 13664*7c356e86SAndroid Build Coastguard Worker whence '[ab]' 13665*7c356e86SAndroid Build Coastguard Worker PATH=mrr 13666*7c356e86SAndroid Build Coastguard Worker case $(command -v miau) { 13667*7c356e86SAndroid Build Coastguard Worker (mrr/miau) echo fail ;; 13668*7c356e86SAndroid Build Coastguard Worker (!(/*|[A-Z]:/*)) echo fail2 ;; 13669*7c356e86SAndroid Build Coastguard Worker ($PWD/mrr/miau) echo ok ;; 13670*7c356e86SAndroid Build Coastguard Worker (/*|[A-Z]:/*) echo pwd bad? ;; 13671*7c356e86SAndroid Build Coastguard Worker (*) echo not reached ;; 13672*7c356e86SAndroid Build Coastguard Worker } 13673*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13674*7c356e86SAndroid Build Coastguard Worker if 13675*7c356e86SAndroid Build Coastguard Worker if 13676*7c356e86SAndroid Build Coastguard Worker if is a reserved word 13677*7c356e86SAndroid Build Coastguard Worker if is a reserved word 13678*7c356e86SAndroid Build Coastguard Worker alias foo='bar baz' 13679*7c356e86SAndroid Build Coastguard Worker alias foo='bar baz' 13680*7c356e86SAndroid Build Coastguard Worker foo is an alias for 'bar baz' 13681*7c356e86SAndroid Build Coastguard Worker foo is an alias for 'bar baz' 13682*7c356e86SAndroid Build Coastguard Worker bar 13683*7c356e86SAndroid Build Coastguard Worker bar 13684*7c356e86SAndroid Build Coastguard Worker bar is a function 13685*7c356e86SAndroid Build Coastguard Worker bar is a function 13686*7c356e86SAndroid Build Coastguard Worker set 13687*7c356e86SAndroid Build Coastguard Worker set 13688*7c356e86SAndroid Build Coastguard Worker set is a special shell builtin 13689*7c356e86SAndroid Build Coastguard Worker set is a special shell builtin 13690*7c356e86SAndroid Build Coastguard Worker true 13691*7c356e86SAndroid Build Coastguard Worker true 13692*7c356e86SAndroid Build Coastguard Worker true is a shell builtin 13693*7c356e86SAndroid Build Coastguard Worker true is a shell builtin 13694*7c356e86SAndroid Build Coastguard Worker alias '[ab]'=: 13695*7c356e86SAndroid Build Coastguard Worker alias '[ab]'=: 13696*7c356e86SAndroid Build Coastguard Worker '[ab]' is an alias for : 13697*7c356e86SAndroid Build Coastguard Worker '[ab]' is an alias for : 13698*7c356e86SAndroid Build Coastguard Worker '[ab]'=: 13699*7c356e86SAndroid Build Coastguard Worker : 13700*7c356e86SAndroid Build Coastguard Worker ok 13701*7c356e86SAndroid Build Coastguard Worker--- 13702*7c356e86SAndroid Build Coastguard Workername: whence-preserve-tradition 13703*7c356e86SAndroid Build Coastguard Workerdescription: 13704*7c356e86SAndroid Build Coastguard Worker This regression test is to ensure that the POSIX compatibility 13705*7c356e86SAndroid Build Coastguard Worker changes for 'command' (see previous test) do not affect traditional 13706*7c356e86SAndroid Build Coastguard Worker 'whence' behaviour. 13707*7c356e86SAndroid Build Coastguard Workercategory: os:mirbsd 13708*7c356e86SAndroid Build Coastguard Workerstdin: 13709*7c356e86SAndroid Build Coastguard Worker PATH=/bin:/usr/bin 13710*7c356e86SAndroid Build Coastguard Worker alias foo="bar baz" 13711*7c356e86SAndroid Build Coastguard Worker bar() { :; } 13712*7c356e86SAndroid Build Coastguard Worker for word in 'if' 'foo' 'bar' 'set' 'true'; do 13713*7c356e86SAndroid Build Coastguard Worker whence "$word" 13714*7c356e86SAndroid Build Coastguard Worker whence -p "$word" 13715*7c356e86SAndroid Build Coastguard Worker whence -v "$word" 13716*7c356e86SAndroid Build Coastguard Worker whence -pv "$word" 13717*7c356e86SAndroid Build Coastguard Worker done 13718*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13719*7c356e86SAndroid Build Coastguard Worker if 13720*7c356e86SAndroid Build Coastguard Worker if is a reserved word 13721*7c356e86SAndroid Build Coastguard Worker if not found 13722*7c356e86SAndroid Build Coastguard Worker 'bar baz' 13723*7c356e86SAndroid Build Coastguard Worker foo is an alias for 'bar baz' 13724*7c356e86SAndroid Build Coastguard Worker foo not found 13725*7c356e86SAndroid Build Coastguard Worker bar 13726*7c356e86SAndroid Build Coastguard Worker bar is a function 13727*7c356e86SAndroid Build Coastguard Worker bar not found 13728*7c356e86SAndroid Build Coastguard Worker set 13729*7c356e86SAndroid Build Coastguard Worker set is a special shell builtin 13730*7c356e86SAndroid Build Coastguard Worker set not found 13731*7c356e86SAndroid Build Coastguard Worker true 13732*7c356e86SAndroid Build Coastguard Worker /bin/true 13733*7c356e86SAndroid Build Coastguard Worker true is a shell builtin 13734*7c356e86SAndroid Build Coastguard Worker true is a tracked alias for /bin/true 13735*7c356e86SAndroid Build Coastguard Worker--- 13736*7c356e86SAndroid Build Coastguard Workername: duffs-device 13737*7c356e86SAndroid Build Coastguard Workerdescription: 13738*7c356e86SAndroid Build Coastguard Worker Check that the compiler did not optimise-break them 13739*7c356e86SAndroid Build Coastguard Worker (lex.c has got a similar one in SHEREDELIM) 13740*7c356e86SAndroid Build Coastguard Workercategory: !shell:faux-ebcdic,!shell:ebcdic-yes 13741*7c356e86SAndroid Build Coastguard Workerstdin: 13742*7c356e86SAndroid Build Coastguard Worker set +U 13743*7c356e86SAndroid Build Coastguard Worker s= 13744*7c356e86SAndroid Build Coastguard Worker typeset -i1 i=0 13745*7c356e86SAndroid Build Coastguard Worker while (( ++i < 256 )); do 13746*7c356e86SAndroid Build Coastguard Worker s+=${i#1#} 13747*7c356e86SAndroid Build Coastguard Worker done 13748*7c356e86SAndroid Build Coastguard Worker s+=$'\xC2\xA0\xE2\x82\xAC\xEF\xBF\xBD\xEF\xBF\xBE\xEF\xBF\xBF\xF0\x90\x80\x80.' 13749*7c356e86SAndroid Build Coastguard Worker typeset -p s 13750*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13751*7c356e86SAndroid Build Coastguard Worker typeset s=$'\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\E\034\035\036\037 !"#$%&\047()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377\u00A0\u20AC\uFFFD\357\277\276\357\277\277\360\220\200\200.' 13752*7c356e86SAndroid Build Coastguard Worker--- 13753*7c356e86SAndroid Build Coastguard Workername: duffs-device-ebcdic 13754*7c356e86SAndroid Build Coastguard Workerdescription: 13755*7c356e86SAndroid Build Coastguard Worker Check that the compiler did not optimise-break them 13756*7c356e86SAndroid Build Coastguard Workercategory: !shell:ebcdic-no 13757*7c356e86SAndroid Build Coastguard Workerstdin: 13758*7c356e86SAndroid Build Coastguard Worker set +U 13759*7c356e86SAndroid Build Coastguard Worker s= 13760*7c356e86SAndroid Build Coastguard Worker typeset -i1 i=0 13761*7c356e86SAndroid Build Coastguard Worker while (( ++i < 256 )); do 13762*7c356e86SAndroid Build Coastguard Worker s+=${i#1#} 13763*7c356e86SAndroid Build Coastguard Worker done 13764*7c356e86SAndroid Build Coastguard Worker #s+=$'\xC2\xA0\xE2\x82\xAC\xEF\xBF\xBD\xEF\xBF\xBE\xEF\xBF\xBF\xF0\x90\x80\x80.' #XXX 13765*7c356e86SAndroid Build Coastguard Worker typeset -p s 13766*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13767*7c356e86SAndroid Build Coastguard Worker typeset s=$'\001\002\003\004\t\006\007\010\011\012\v\f\r\016\017\020\021\022\023\024\n\b\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\E\050\051\052\053\054\055\056\a\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077 ���������.<(+|&���������!$*);^-/�������Ѧ,%_>?���������`:#@\175="�abcdefghi�������jklmnopqr���Ƥ�~stuvwxyz���[ޮ����������ݨ�]��{ABCDEFGHI������}JKLMNOPQR������\\�STUVWXYZ������0123456789�����\377' 13768*7c356e86SAndroid Build Coastguard Worker--- 13769*7c356e86SAndroid Build Coastguard Workername: duffs-device-faux-EBCDIC 13770*7c356e86SAndroid Build Coastguard Workerdescription: 13771*7c356e86SAndroid Build Coastguard Worker Check that the compiler did not optimise-break them 13772*7c356e86SAndroid Build Coastguard Workercategory: shell:faux-ebcdic 13773*7c356e86SAndroid Build Coastguard Workerstdin: 13774*7c356e86SAndroid Build Coastguard Worker set +U 13775*7c356e86SAndroid Build Coastguard Worker s= 13776*7c356e86SAndroid Build Coastguard Worker typeset -i1 i=0 13777*7c356e86SAndroid Build Coastguard Worker while (( ++i < 256 )); do 13778*7c356e86SAndroid Build Coastguard Worker s+=${i#1#} 13779*7c356e86SAndroid Build Coastguard Worker done 13780*7c356e86SAndroid Build Coastguard Worker s+=$'\xC2\xA0\xE2\x82\xAC\xEF\xBF\xBD\xEF\xBF\xBE\xEF\xBF\xBF\xF0\x90\x80\x80.' 13781*7c356e86SAndroid Build Coastguard Worker typeset -p s 13782*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13783*7c356e86SAndroid Build Coastguard Worker typeset s=$'\001\002\003\004\005\006\a\b\t\n\v\f\r\016\017\020\021\022\023\024\025\026\027\030\031\032\E\034\035\036\037 !"#$%&\047()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237������������������������������������������������������������������������������������������������\u00A0\u20AC\uFFFD�\220\200\200.' 13784*7c356e86SAndroid Build Coastguard Worker--- 13785*7c356e86SAndroid Build Coastguard Workername: stateptr-underflow 13786*7c356e86SAndroid Build Coastguard Workerdescription: 13787*7c356e86SAndroid Build Coastguard Worker This check overflows an Xrestpos stored in a short in R40 13788*7c356e86SAndroid Build Coastguard Workercategory: fastbox 13789*7c356e86SAndroid Build Coastguard Workerstdin: 13790*7c356e86SAndroid Build Coastguard Worker function Lb64decode { 13791*7c356e86SAndroid Build Coastguard Worker [[ -o utf8-mode ]]; local u=$? 13792*7c356e86SAndroid Build Coastguard Worker set +U 13793*7c356e86SAndroid Build Coastguard Worker local c s="$*" t= 13794*7c356e86SAndroid Build Coastguard Worker [[ -n $s ]] || { s=$(cat;print x); s=${s%x}; } 13795*7c356e86SAndroid Build Coastguard Worker local -i i=0 n=${#s} p=0 v x 13796*7c356e86SAndroid Build Coastguard Worker local -i16 o 13797*7c356e86SAndroid Build Coastguard Worker 13798*7c356e86SAndroid Build Coastguard Worker while (( i < n )); do 13799*7c356e86SAndroid Build Coastguard Worker c=${s:(i++):1} 13800*7c356e86SAndroid Build Coastguard Worker case $c { 13801*7c356e86SAndroid Build Coastguard Worker (=) break ;; 13802*7c356e86SAndroid Build Coastguard Worker ([A-Z]) (( v = 1#$c - 65 )) ;; 13803*7c356e86SAndroid Build Coastguard Worker ([a-z]) (( v = 1#$c - 71 )) ;; 13804*7c356e86SAndroid Build Coastguard Worker ([0-9]) (( v = 1#$c + 4 )) ;; 13805*7c356e86SAndroid Build Coastguard Worker (+) v=62 ;; 13806*7c356e86SAndroid Build Coastguard Worker (/) v=63 ;; 13807*7c356e86SAndroid Build Coastguard Worker (*) continue ;; 13808*7c356e86SAndroid Build Coastguard Worker } 13809*7c356e86SAndroid Build Coastguard Worker (( x = (x << 6) | v )) 13810*7c356e86SAndroid Build Coastguard Worker case $((p++)) { 13811*7c356e86SAndroid Build Coastguard Worker (0) continue ;; 13812*7c356e86SAndroid Build Coastguard Worker (1) (( o = (x >> 4) & 255 )) ;; 13813*7c356e86SAndroid Build Coastguard Worker (2) (( o = (x >> 2) & 255 )) ;; 13814*7c356e86SAndroid Build Coastguard Worker (3) (( o = x & 255 )) 13815*7c356e86SAndroid Build Coastguard Worker p=0 13816*7c356e86SAndroid Build Coastguard Worker ;; 13817*7c356e86SAndroid Build Coastguard Worker } 13818*7c356e86SAndroid Build Coastguard Worker t=$t\\x${o#16#} 13819*7c356e86SAndroid Build Coastguard Worker done 13820*7c356e86SAndroid Build Coastguard Worker print -n $t 13821*7c356e86SAndroid Build Coastguard Worker (( u )) || set -U 13822*7c356e86SAndroid Build Coastguard Worker } 13823*7c356e86SAndroid Build Coastguard Worker 13824*7c356e86SAndroid Build Coastguard Worker i=-1 13825*7c356e86SAndroid Build Coastguard Worker s= 13826*7c356e86SAndroid Build Coastguard Worker while (( ++i < 12120 )); do 13827*7c356e86SAndroid Build Coastguard Worker s+=a 13828*7c356e86SAndroid Build Coastguard Worker done 13829*7c356e86SAndroid Build Coastguard Worker Lb64decode $s >/dev/null 13830*7c356e86SAndroid Build Coastguard Worker--- 13831*7c356e86SAndroid Build Coastguard Workername: xtrace-1 13832*7c356e86SAndroid Build Coastguard Workerdescription: 13833*7c356e86SAndroid Build Coastguard Worker Check that "set -x" doesn't redirect too quickly 13834*7c356e86SAndroid Build Coastguard Workerstdin: 13835*7c356e86SAndroid Build Coastguard Worker print '#!'"$__progname" >bash 13836*7c356e86SAndroid Build Coastguard Worker cat >>bash <<'EOF' 13837*7c356e86SAndroid Build Coastguard Worker echo 'GNU bash, version 2.05b.0(1)-release (i386-ecce-mirbsd10) 13838*7c356e86SAndroid Build Coastguard Worker Copyright (C) 2002 Free Software Foundation, Inc.' 13839*7c356e86SAndroid Build Coastguard Worker EOF 13840*7c356e86SAndroid Build Coastguard Worker chmod +x bash 13841*7c356e86SAndroid Build Coastguard Worker "$__progname" -xc 'foo=$(./bash --version 2>&1 | sed q); echo "=$foo="' 13842*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13843*7c356e86SAndroid Build Coastguard Worker =GNU bash, version 2.05b.0(1)-release (i386-ecce-mirbsd10)= 13844*7c356e86SAndroid Build Coastguard Workerexpected-stderr-pattern: 13845*7c356e86SAndroid Build Coastguard Worker /.*/ 13846*7c356e86SAndroid Build Coastguard Worker--- 13847*7c356e86SAndroid Build Coastguard Workername: xtrace-2 13848*7c356e86SAndroid Build Coastguard Workerdescription: 13849*7c356e86SAndroid Build Coastguard Worker Check that "set -x" is off during PS4 expansion 13850*7c356e86SAndroid Build Coastguard Workerstdin: 13851*7c356e86SAndroid Build Coastguard Worker f() { 13852*7c356e86SAndroid Build Coastguard Worker print -n "(f1:$-)" 13853*7c356e86SAndroid Build Coastguard Worker set -x 13854*7c356e86SAndroid Build Coastguard Worker print -n "(f2:$-)" 13855*7c356e86SAndroid Build Coastguard Worker } 13856*7c356e86SAndroid Build Coastguard Worker PS4='[(p:$-)$(f)] ' 13857*7c356e86SAndroid Build Coastguard Worker print "(o0:$-)" 13858*7c356e86SAndroid Build Coastguard Worker set -x -o inherit-xtrace 13859*7c356e86SAndroid Build Coastguard Worker print "(o1:$-)" 13860*7c356e86SAndroid Build Coastguard Worker set +x 13861*7c356e86SAndroid Build Coastguard Worker print "(o2:$-)" 13862*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13863*7c356e86SAndroid Build Coastguard Worker (o0:sh) 13864*7c356e86SAndroid Build Coastguard Worker (o1:shx) 13865*7c356e86SAndroid Build Coastguard Worker (o2:sh) 13866*7c356e86SAndroid Build Coastguard Workerexpected-stderr: 13867*7c356e86SAndroid Build Coastguard Worker [(p:sh)(f1:sh)(f2:sh)] print '(o1:shx)' 13868*7c356e86SAndroid Build Coastguard Worker [(p:sh)(f1:sh)(f2:sh)] set +x 13869*7c356e86SAndroid Build Coastguard Worker--- 13870*7c356e86SAndroid Build Coastguard Workername: fksh-flags 13871*7c356e86SAndroid Build Coastguard Workerdescription: 13872*7c356e86SAndroid Build Coastguard Worker Check that FKSH functions have their own shell flags 13873*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-no 13874*7c356e86SAndroid Build Coastguard Workerstdin: 13875*7c356e86SAndroid Build Coastguard Worker [[ $KSH_VERSION = Version* ]] && set +B 13876*7c356e86SAndroid Build Coastguard Worker function foo { 13877*7c356e86SAndroid Build Coastguard Worker set +f 13878*7c356e86SAndroid Build Coastguard Worker set -e 13879*7c356e86SAndroid Build Coastguard Worker echo 2 "${-/s}" . 13880*7c356e86SAndroid Build Coastguard Worker } 13881*7c356e86SAndroid Build Coastguard Worker set -fh 13882*7c356e86SAndroid Build Coastguard Worker echo 1 "${-/s}" . 13883*7c356e86SAndroid Build Coastguard Worker foo 13884*7c356e86SAndroid Build Coastguard Worker echo 3 "${-/s}" . 13885*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13886*7c356e86SAndroid Build Coastguard Worker 1 fh . 13887*7c356e86SAndroid Build Coastguard Worker 2 eh . 13888*7c356e86SAndroid Build Coastguard Worker 3 fh . 13889*7c356e86SAndroid Build Coastguard Worker--- 13890*7c356e86SAndroid Build Coastguard Workername: fksh-flags-legacy 13891*7c356e86SAndroid Build Coastguard Workerdescription: 13892*7c356e86SAndroid Build Coastguard Worker Check that even FKSH functions share the shell flags 13893*7c356e86SAndroid Build Coastguard Workercategory: shell:legacy-yes 13894*7c356e86SAndroid Build Coastguard Workerstdin: 13895*7c356e86SAndroid Build Coastguard Worker [[ $KSH_VERSION = Version* ]] && set +B 13896*7c356e86SAndroid Build Coastguard Worker foo() { 13897*7c356e86SAndroid Build Coastguard Worker set +f 13898*7c356e86SAndroid Build Coastguard Worker set -e 13899*7c356e86SAndroid Build Coastguard Worker echo 2 "${-/s}" . 13900*7c356e86SAndroid Build Coastguard Worker } 13901*7c356e86SAndroid Build Coastguard Worker set -fh 13902*7c356e86SAndroid Build Coastguard Worker echo 1 "${-/s}" . 13903*7c356e86SAndroid Build Coastguard Worker foo 13904*7c356e86SAndroid Build Coastguard Worker echo 3 "${-/s}" . 13905*7c356e86SAndroid Build Coastguard Workerexpected-stdout: 13906*7c356e86SAndroid Build Coastguard Worker 1 fh . 13907*7c356e86SAndroid Build Coastguard Worker 2 eh . 13908*7c356e86SAndroid Build Coastguard Worker 3 eh . 13909*7c356e86SAndroid Build Coastguard Worker--- 13910*7c356e86SAndroid Build Coastguard Workername: fsh-flags 13911*7c356e86SAndroid Build Coastguard Workerdescription: 13912*7c356e86SAndroid Build Coastguard Worker Check that !FKSH functions share the shell flags 13913*7c356e86SAndroid Build Coastguard Workerstdin: 13914*7c356e86SAndroid Build Coastguard Worker [[ $KSH_VERSION = Version* ]] && set +B 13915*7c356e86SAndroid Build Coastguard Worker foo() { 13916*7c356e86SAndroid Build Coastguard Worker set +f 13917*7c356e86SAndroid Build Coastguard Worker set -e 13918*7c356e86SAndroid Build Coastguard Worker echo 2 "${-/s}" . 13919*7c356e86SAndroid Build Coastguard Worker } 13920*7c356e86SAndroid Build Coastguard Worker set -fh 13921*7c356e86SAndroid Build Coastguard Worker echo 1 "${-/s}" . 13922 foo 13923 echo 3 "${-/s}" . 13924expected-stdout: 13925 1 fh . 13926 2 eh . 13927 3 eh . 13928--- 13929