On Mon, Apr 18, 2011 at 10:57:00AM -0400, Steven W. Orr wrote: > I get the same result as you when I do it your way. But if I add the > typeset, I still get the same result: > > 515 > unset ss; typeset -i ss=1; ((ss)); echo $? > 0 > 516 > unset ss; typeset -i ss=0; ((ss)); echo $? > 1 > > Interesting. So I redid my problem using unset: > > 521 > unset ss > 522 > typeset -i ss=0 > 523 > > 523 > (( ss )) > 524 > echo $? > 1 > 525 > unset ss > 526 > typeset -i ss=1 > 527 > (( ss )) > 528 > echo $? > 0 > > Why did this make a difference? What did the unset do?
What difference? I don't see any difference. > It gets worse: ... > It printed the correct values! > Now let's try this differently. This time I initialize ss using a real > integer value instead of hoping that the string gets converted to an integer (more correct output) > # One last time but without using unset (more correct output) > Does this mean that I have to go and check *all* of my code to ensure that > integer initializations are being done using integer arithmetic expressions? I'm confused -- you don't seem to be able to show the problem occurring. I don't know what an "integer arithmetic expression" is, or at least, I don't know what you think the difference between "1" and $((1)) is. They are both the same thing: 1. So, if you aren't seeing any difference between x=1 and x=$((1)) and typeset -i x=1 and so on, why do you think you need to change your code? > I'd say this is a big deal. No? Only if you can reproduce the original problem. So far I haven't seen it.