
From:  Kerin Millar 
Subject:  Re: whats wrong with (( a = 8 , a > 4 && a = 2  a )) , bash: ((: a = 8 , a > 4 && a = 2  a : attempted assignment to nonvariable (error token is "= 2  a ") 
Date:  Thu, 23 Mar 2023 11:21:44 +0000 
On Thu, 23 Mar 2023 11:32:33 +0100 alex xmb ratchev <fxmbsw7@gmail.com> wrote: > i remember doing && (( code > maybe i didnt '=' in action there > > (( a = 8 , a > 4 && a = 2  a )) > > bash: ((: a = 8 , a > 4 && a = 2  a : attempted assignment to > nonvariable (error token is "= 2  a ") > > > (( a = 8 , a > 4 && a && a  a )) > > works > a=6 > > .. > i suppose this is a (( lex bug where u didnt include  && in op for = I agree that it looks like a possible bug in the parser. It works if parentheses are used to disambiguate one of the subtractions. $ (( a = 8 , a > 4 && (a = 2)  a )); declare p a declare  a="6" Even when made to work, I would consider it to be poor. Consider what happens below. It is a fine example of what can happen in the course of writing unconventional code without understanding the consequences. $ (( a = 2 , a > 1 && (a = 2)  a )); declare p a declare  a="1" If you must do this sort of thing, use the conditional operator instead e.g. (( a = 8, a = (a > 4) ? a  2 : a  1 )). Alternatively, just avoid doing assignments in arithmetic expressions except where there's a clear advantage (I cannot see one in this case).  Kerin Millar
[Prev in Thread]  Current Thread  [Next in Thread] 