# @(#)precedence_test 1.0 91/07/24 Maarten Litmaath # test of relative precedences for `&&' and `||' operators echo "\`Say' echos its argument. Its return value is of no interest." case `echo -n` in '') Say () { echo -n "$*" ; } ;; *) Say () { echo "$*\c" ; } ;; esac echo "\`Truth' echos its argument and returns a TRUE result." Truth () { Say $1; return 0; } echo "\`False' echos its argument and returns a FALSE result." False () { Say $1; return 1; } echo "" cmd1='$open $test1 && $test2 $close || $test3' cmd2='$test1 || $open $test2 && $test3 $close' grouping_sh= grouping_C='( )' test3='Say 3' for i in 1 2 do eval proto=\$cmd$i for test1 in 'Truth 1' 'False 1' do for test2 in 'Truth 2' 'False 2' do for precedence in sh C do eval set x \$grouping_$precedence shift open=${1-' '} close=${2-' '} eval cmd=\""$proto"\" Say "$cmd output=" output=`eval "$cmd"` Say "$output" read correct || { echo 'Input fubar. Abort.' >&2; exit 1; } test "X$output" = "X$correct" || echo " correct=$correct" echo '' done echo '' done done done << EOF 12 12 123 123 13 13 13 13 13 1 13 1 123 123 12 12 EOF