On Mon, Apr 2, 2018 at 5:16 PM, PRussell <prusselltechgr...@gmail.com>
wrote:

>
> echo 4B
>   ( set -x;var=5;var1=var; (( var1 == $var2 )) && echo yes || echo no )
>
>
> It appears that 3A and 4A evaluate to 0 because of the arithmetic context.
> 3A echo's yes; 4A echo's no.
>
> The problem is what is happening with 3B and 4B.  I tested on bash 4.3.11
> and
> bash 4.4.19 and got a slightly different error message.
>
> Bash version 4.3.11:
>
> ./tt: line 18: var1: var1 ==  : syntax error: operand expected (error
> token is "==  ")
>
> Bash version 4.4.19 (???? was garabage):
>
> ./tt: line 18: ????: var1 ==  : syntax error: operand expected (error
> token is "==  ")
>
> Peggy Russell
>
>
The problem here is quite simple. When using "$", the parameter is expanded
first. Since
it's empty, it expands to the empty string, and the (( keyword simply sees
(( var1 == )),
which is absolutely a syntax error. When not using "$", no expansions
happen before the
(( keyword sees the variable name, and so it uses the name correctly. So
the fix here is
simple: provide variable names without using "$" in an arithmetic context.

Reply via email to