# continue-p.sh: test of the continue built-in for any POSIX-compliant shell posix="true" test_oE 'continuing one for loop, unnested' for i in 1 2 3; do echo in $i continue 1 echo out $i done echo done $? __IN__ in 1 in 2 in 3 done 0 __OUT__ test_oE 'continuing one while loop, unnested' i=1 while [ $i -le 3 ]; do echo in $i i=$((i+1)) continue 1 echo out $i done echo done $? __IN__ in 1 in 2 in 3 done 0 __OUT__ test_oE 'continuing one until loop, unnested' i=1 until [ $i -gt 3 ]; do echo in $i i=$((i+1)) continue 1 echo out $i done echo done $? __IN__ in 1 in 2 in 3 done 0 __OUT__ test_oE 'continuing one for loop, nested in for loop' for i in 1 2 3; do echo in $i for j in a b c; do echo in $i $j continue 1 echo out $i $j done echo out $i done echo done $? __IN__ in 1 in 1 a in 1 b in 1 c out 1 in 2 in 2 a in 2 b in 2 c out 2 in 3 in 3 a in 3 b in 3 c out 3 done 0 __OUT__ test_oE 'continuing one for loop, nested in while loop' i=1 while [ $i -le 3 ]; do echo in $i for j in a b c; do echo in $i $j continue 1 echo out $i $j done echo out $i i=$((i+1)) done echo done $? __IN__ in 1 in 1 a in 1 b in 1 c out 1 in 2 in 2 a in 2 b in 2 c out 2 in 3 in 3 a in 3 b in 3 c out 3 done 0 __OUT__ test_oE 'continuing one while loop, nested in while loop' i=1 while [ $i -le 3 ]; do echo in outer $i j=1 while [ $j -le 3 ]; do echo in inner $i $j j=$((j+1)) continue 1 echo out inner $i $j done echo out outer $i i=$((i+1)) done echo done $? __IN__ in outer 1 in inner 1 1 in inner 1 2 in inner 1 3 out outer 1 in outer 2 in inner 2 1 in inner 2 2 in inner 2 3 out outer 2 in outer 3 in inner 3 1 in inner 3 2 in inner 3 3 out outer 3 done 0 __OUT__ test_oE 'continuing one while loop, nested in until loop' i=1 until [ $i -gt 3 ]; do echo in outer $i j=1 while [ $j -le 3 ]; do echo in inner $i $j j=$((j+1)) continue 1 echo out inner $i $j done echo out outer $i i=$((i+1)) done echo done $? __IN__ in outer 1 in inner 1 1 in inner 1 2 in inner 1 3 out outer 1 in outer 2 in inner 2 1 in inner 2 2 in inner 2 3 out outer 2 in outer 3 in inner 3 1 in inner 3 2 in inner 3 3 out outer 3 done 0 __OUT__ test_oE 'continuing one until loop, nested in until loop' i=1 until [ $i -gt 3 ]; do echo in outer $i j=1 until [ $j -gt 3 ]; do echo in inner $i $j j=$((j+1)) continue 1 echo out inner $i $j done echo out outer $i i=$((i+1)) done echo done $? __IN__ in outer 1 in inner 1 1 in inner 1 2 in inner 1 3 out outer 1 in outer 2 in inner 2 1 in inner 2 2 in inner 2 3 out outer 2 in outer 3 in inner 3 1 in inner 3 2 in inner 3 3 out outer 3 done 0 __OUT__ test_oE 'continuing two for loops, outermost' for i in 1 2 3; do echo in $i for j in a b c; do echo in $i $j continue 2 echo out $i $j done echo out $i done echo done $? __IN__ in 1 in 1 a in 2 in 2 a in 3 in 3 a done 0 __OUT__ test_oE 'continuing for and while loops, outermost' i=1 while [ $i -le 3 ]; do echo in $i for j in a b c; do echo in $i $j i=$((i+1)) continue 2 echo out $i $j done echo out $i done echo done $? __IN__ in 1 in 1 a in 2 in 2 a in 3 in 3 a done 0 __OUT__ test_oE 'continuing two while loops, outermost' i=1 while [ $i -le 3 ]; do echo in outer $i while true; do echo in inner $i i=$((i+1)) continue 2 echo out inner $i done echo out outer $i done echo done $? __IN__ in outer 1 in inner 1 in outer 2 in inner 2 in outer 3 in inner 3 done 0 __OUT__ test_oE 'continuing while and until loops, outermost' i=1 until [ $i -gt 3 ]; do echo in outer $i while true; do echo in inner $i i=$((i+1)) continue 2 echo out inner $i done echo out outer $i done echo done $? __IN__ in outer 1 in inner 1 in outer 2 in inner 2 in outer 3 in inner 3 done 0 __OUT__ test_oE 'continuing two for loops, nested in another for loop' for i in 1 2 3; do echo in $i for j in a b c; do echo in $i $j for k in + -; do echo in $i $j $k continue 2 echo out $i $j $k done echo out $i $j done echo out $i done echo done $? __IN__ in 1 in 1 a in 1 a + in 1 b in 1 b + in 1 c in 1 c + out 1 in 2 in 2 a in 2 a + in 2 b in 2 b + in 2 c in 2 c + out 2 in 3 in 3 a in 3 a + in 3 b in 3 b + in 3 c in 3 c + out 3 done 0 __OUT__ test_oE 'continuing three for loops, outermost' for i in 1 2 3; do echo in $i for j in a b c; do echo in $i $j for k in + -; do echo in $i $j $k continue 3 echo out $i $j $k done echo out $i $j done echo out $i done echo done $? __IN__ in 1 in 1 a in 1 a + in 2 in 2 a in 2 a + in 3 in 3 a in 3 a + done 0 __OUT__ test_oE 'default operand is 1' for i in 1; do echo in $i for j in a; do echo in $i $j for k in + -; do echo in $i $j $k continue echo out $i $j $k done echo out $i $j done echo out $i done echo done $? __IN__ in 1 in 1 a in 1 a + in 1 a - out 1 a out 1 done 0 __OUT__ test_OE -e 0 'exit status of continue with $? > 0' for i in 1; do false continue done __IN__ test_O -d -e n 'zero operand' for i in 1; do continue 0 done __IN__ test_OE 'continuing one more than actual nest level one' for i in 1; do continue 2 echo not reached done __IN__ test_OE 'continuing one more than actual nest level two' for i in 1; do for j in a; do continue 3 echo not reached 1 done echo not reached 2 done __IN__ test_OE 'continuing much more than actual nest level one' for i in 1; do continue 100 echo not reached done __IN__ # This is a questionable case. Is this really a "lexically enclosing" loop as # defined in POSIX? Most shells do support this case. test_oE 'continuing out of eval' for i in 1 2; do echo $i eval continue echo not reached done __IN__ 1 2 __OUT__ test_OE 'continuing with !' for i in 1; do ! continue echo not reached done __IN__ test_OE 'continuing before &&' for i in 1; do continue && echo not reached 1 echo not reached 2 $? done __IN__ test_OE 'continuing after &&' for i in 1; do true && continue echo not reached $? done __IN__ test_OE 'continuing before ||' for i in 1; do continue || echo not reached 1 echo not reached 2 $? done __IN__ test_OE 'continuing after ||' for i in 1; do false || continue echo not reached $? done __IN__ test_OE 'continuing out of brace' for i in 1; do { continue; } echo not reached done __IN__ test_OE 'continuing out of if' for i in 1; do if continue; then echo not reached then; else echo not reached else; fi echo not reached done __IN__ test_OE 'continuing out of then' for i in 1; do if true; then continue; echo not reached then; else not reached else; fi echo not reached done __IN__ test_OE 'continuing out of else' for i in 1; do if false; then echo not reached then; else continue; not reached else; fi echo not reached done __IN__ test_OE 'continuing out of case' for i in 1; do case x in x) continue echo not reached in case esac echo not reached after esac done __IN__