On Thu, Dec 09, 2010 at 05:52:49PM +0000, Dominic Raferd wrote:
> $ val=0; let val++; echo $val,$?; unset val
> 1,1
> 
> see the error code 1. Setting any other start value (except
> undefined) for val does not produce this error, the problem occurs
> for let val++ and let val-- if the start value is 0.
> 
> for let ++val and let --val the problem occurs if the result is 0.
> Also for the
> command:
> 
> $ val=10; let val=val+2*2-14; echo $val,$?; unset val
> 
> ...
> Why does this happen? Is it 'by design'? It makes arithmetic with
> bash let very dangerous because it can throw unexpected errors (and
> break scripts running with  set -e).

I don't know why this is done, but the behavior is clearly documented
in the manpage:

   let arg [arg ...]
      Each arg is an arithmetic expression to be evaluated (see ARITH-
      METIC EVALUATION above).  If the last arg evaluates  to  0,  let
      returns 1; 0 is returned otherwise.

Ken

Reply via email to