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

Re: [bug] Math evaluation done twice in subscript in specific conditions



2019-07-24 01:50:23 +0200, Sebastian Gniazdowski:
[...]
> idx=0
> a=()
> : ${a[++idx]::=$idx}
> print -rl $a
> -> 1
> : ${a[++idx]::=$idx}
> print -rl $a
> -> 1
> -> 3
> idx=1
> : ${a[++idx]::=$idx}
> print -rl $a
> -> 1
> -> 2
> -> 3
> 
> So apparently the assignment to idx does change something for the
> following ::= "call" and makes it work correctly. The second and
> following ::= calls cause $idx to increment twice.
[...]

It is increased by 2 on the first one as well:

$ i=0 a=()
$ : ${a[++i]::=$i}; echo $i $a
2 1
$ : ${a[++i]::=$i}; echo $i $a
4 1 3

With:

$ i='psvar[0`uname>&2`]'
$ : ${a[i]}
Linux
$ : ${a[i]::=}
Linux
Linux
zsh: a: assignment to invalid subscript range

So the extra evaluation of the indice is done *before* the
assignment it would seem.

$ echo ${a[i]:=x}
Linux
Linux
zsh: a: assignment to invalid subscript range

It makes more sense in that latter case where I imaging a[i] is
dereferenced first to check if it's empty or not, and then the
indice is computed again upon assignment. 

-- 
Stephane



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