[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: operator precedence confusion
From: |
Greg Wooledge |
Subject: |
Re: operator precedence confusion |
Date: |
Mon, 29 Apr 2024 15:52:18 -0400 |
On Mon, Apr 29, 2024 at 02:43:32PM -0500, Mike McClain wrote:
> $ help let says:
> The following list of operators is grouped into levels of equal-precedence
> operators.
> The levels are listed in order of decreasing precedence.
>
> id++, id-- variable post-increment, post-decrement
> ++id, --id variable pre-increment, pre-decrement
> -, + unary minus, plus
> !, ~ logical and bitwise negation
> ** exponentiation
> *, /, % multiplication, division, remainder
> .
> .
> .
>
> Hence plus(+) has higher precedence than multiplication(*).
> Yet
> $ let n=$[1+2*3]; echo $n;
> 7
> or
> $ echo $[1+2*3]
> 7
>
> Shows that multiplication(*) is executed/interpreted before plus(+).
You're confusing "unary minus, plus" with "addition, subtraction".
Unary minus and unary plus are just numbers with a leading sign.
Here's a more complete excerpt from the "help let" output:
id++, id-- variable post-increment, post-decrement
++id, --id variable pre-increment, pre-decrement
-, + unary minus, plus
!, ~ logical and bitwise negation
** exponentiation
*, /, % multiplication, division, remainder
+, - addition, subtraction
<<, >> left and right bitwise shifts
<=, >=, <, > comparison
==, != equality, inequality
Also, the $[ ] syntax has been deprecated for decades. You should be
using $(( )) or let instead.