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

Arith parsing bug with minus after $#



After the getopts patch (which appeared within an hour after my report
-- impressive!), I ran into another hurdle with the same shell function.
Doing arithmetic calculations with the shell parameter containing the
number of positional parameters ($#) triggers a parsing bug in
arithmetic evaluation.

In current zsh git code:

$ zsh
% set --
% echo $#
0
% echo $(($#-1))
41

Expected output: -1, of course. Sometimes 81 is produced instead of 41!
I haven't figured out a pattern yet.

% echo $(($#-(1+1)))
zsh: bad math expression: operator expected at `(1+1)'

(expected output: -2)

In both cases, it does work correctly if a space is inserted before the
'-', but that space should be optional.

Enabling 'emulate sh' makes no difference.

This must be a long-standing bug, becasue zsh 4.3.11 that came with my
Mac has it too.

(According to my testing, other shells that support arith all do this
correctly.)

- Martijn



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