mirror of
https://git.busybox.net/busybox
synced 2025-05-13 14:14:01 +02:00
This fixes arith-precedence1.tests. This breaks arith-ternary2.tests again (we now evaluate variables on not-taken branches). We need a better logic here anyway: not only bare variables should not evaluate when not-taken: 1 ? eval_me : do_not_eval but any (arbitrarily complex) expressions shouldn't evaluate as well! 1 ? var_is_set=1 : ((var_is_not_set=2,var2*=4)) function old new delta evaluate_string 1097 1148 +51 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
15 lines
547 B
Text
Executable file
15 lines
547 B
Text
Executable file
exec 2>&1
|
|
# bash documentation says that precedence order is:
|
|
# ...
|
|
# expr ? expr1 : expr2
|
|
# = *= /= %= += -= <<= >>= &= ^= |=
|
|
# exprA , exprB
|
|
# but in practice, the rules for expr1 and expr2 are different:
|
|
# assignments and commas in expr1 have higher precedence than :?,
|
|
# but in expr2 they haven't:
|
|
# "v ? 1,2 : 3,4" is parsed as "(v ? (1,2) : 3),4"
|
|
# "v ? a=2 : b=4" is parsed as "(v ? (a=1) : b)=4" (thus, this is a syntax error)
|
|
echo 4:$((0 ? 1,2 : 3,4))
|
|
echo 4:$((1 ? 1,2 : 3,4))
|
|
echo 4:"$((0 ? 1,2 : 3,4))"
|
|
echo 4:"$((1 ? 1,2 : 3,4))"
|