Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Airthmetic confusion...

From: Mike Hernandez <sequethin@xxxxxxxxx>
Subject: Re: Airthmetic confusion...
Date: Mon, 16 May 2005 16:59:27 -0400


 I see that "0" is false and !0 is true...but...we
 are doing arithmetic and not logical evaluation.

 Suppose the following situation:
 There is a script which first line set 
		set -e
 (exit on error), because your script do something not-undoable.
 Inside the script there is a claculation, which has to do correct
 thing in the sense of for example not accessing inexistant variables
 or not accessing arrays out of bounds.

 The calculations are of non-trivial nature (that's why we let the
 computer do such boring tidy things ;)

 Now a calculation returns "0" as its result and BANG! the script


 Not what was intended, I think.

 As a sideffect a previously existant variable become inexistant by
 assigning a "0"? Not very logical I think.... :O)

 Arithmetic evaluation should be sperated from logical evaluation.

 Happy zshing!


> On 5/16/05, Matthias Berndt <Berndt.Matthias@xxxxxx> wrote:
> > I don't know your problem, but these expression works fine here. Did you
> > make something special before or in your startup-scripts?
> Actually what happens is that the operation and assignment are
> performed but the return code of the expression evaluates to 1, which
> is an error. I tried on my machine and get the same results:
> (mike@mhernandez)(24/pts)(04:45pm:05/16/05)-
> (%:~)- (( x = 0 ))
> (mike@mhernandez)(25/pts)(04:46pm:05/16/05)-
> (%:~)- echo $?
> 1
> (mike@mhernandez)(26/pts)(04:46pm:05/16/05)-
> (%:~)- echo $x
> 0
> If you set a variable to any integer other than 0, positive or
> negative, the return code is 0, which is successful exit, for example:
> (mike@mhernandez)(30/pts)(04:53pm:05/16/05)-
> (%:~)- (( r = -5 ))
> (mike@mhernandez)(31/pts)(04:53pm:05/16/05)-
> (%:~)- echo $?
> 0
> This occurs with a regular assignment as above, or if the assignment
> contains some variables (as in x = b - 4, if b was 4 the return code
> would be 1, yet the math is done and x is set to equal 0).
> There must be a reason why assigning 0 to a variable is considered an
> error (a reason which I could speculate about, but don't know for
> sure).
> Mike

Messages sorted by: Reverse Date, Date, Thread, Author