help-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: whats wrong with (( a = 8 , a > 4 && a -= 2 || a-- )) , bash: ((: a


From: Bipul kumar
Subject: Re: whats wrong with (( a = 8 , a > 4 && a -= 2 || a-- )) , bash: ((: a = 8 , a > 4 && a -= 2 || a-- : attempted assignment to non-variable (error token is "-= 2 || a-- ")
Date: Thu, 23 Mar 2023 21:36:38 +0530

Let me explain here
The -= operator performs a compound subtraction and assignment operation,
which modifies the value of the variable on the left-hand side of the
operator.
Also it looks  within a logical expression like this a -= 2 , Bash does not
allow any left side effects to occur.
So in order to make it work as it insists bash to perform in an isolated
subshell  only a - = 2  NO ANY OTHER LOGICAL EXPRESSION  Because it's a
machine not human who sees from the eye. They work one instruction at a
time with RULES, So you need to put inside parenthesis.

And i don't think it's bug

    Respectfully,
    Bipul
    PUBLIC KEY <http://ix.io/1nWf>
    97F0 2E08 7DE7 D538 BDFA  B708 86D8 BE27 8196 D466
                    ** Please excuse brevity and typos. **


On Thu, Mar 23, 2023 at 9:23 PM Bipul kumar <bipul.opensource@gmail.com>
wrote:

> Hi Alex,
>
> It's failing because, what you are doing is compound assignment
>   a -= 2
> which needs to be inside parentheses.
> It works for me.
>  (( a = 8 , a > 4 && (a -= 2) || a-- ))
> $ echo $a
> 6
>
> source https://www.gnu.org/software/bash/manual/bash.html    search
> "compound assignment"
>
>     Respectfully,
>     Bipul
>     PUBLIC KEY <http://ix.io/1nWf>
>     97F0 2E08 7DE7 D538 BDFA  B708 86D8 BE27 8196 D466
>                     ** Please excuse brevity and typos. **
>
>
> On Thu, Mar 23, 2023 at 4:03 PM 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
>> non-variable (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 =
>>
>> is it ? :))
>>
>> greets
>>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]