| # @(#)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 |