Re: unexpected clearing of parameter flags with ::=

Mikael Magnusson <[email protected]>
Newsgroups gmane.comp.shells.zsh.devel
Message-ID <CAHYJk3RPgqh54Mky+5ar6_ui7H7mNzzuuxoYhTLRtxLrQE+1yQ@mail.gmail.com>
On Mon, May 2, 2022 at 9:46 AM Mikael Magnusson <[email protected]> wrote:
>
> % typeset -Z3 i
> % echo ${i=5}
> 005
> % echo ${i:=15}
> 005
> % echo ${i::=15}
> 15
At this point,
% echo ${i}
015

>
> The manpage says
>  ${name::=word}
>   In the first form, if name is unset then set it to word; in the second
>   form, if name is unset or null then set it to word; and in  the  third
>   form,  unconditionally  set  name to word.  In all forms, the value of
>   the parameter is then substituted.
>
> which to me doesn't imply that the parameter is reset first,
> especially since it isn't reset for the first form. I'm a little
> confused as to why this doesn't assign the value either:
>
> % unset i
> % typeset -Z3 i
> % echo ${i:=25}
This actually echoes three spaces (not included in my original mail apparently):
% echo _${i:=25}_
_   _


> but this does set it:
> % unset i
> % typeset i
> % echo ${i:=25}
> 25
and again, echo ${i} here shows 025 as expected.

> I thought maybe -Z3 causes the implicit value to be 000 but it is
> printed as empty, so shouldn't it fulfil the "unset or null" condition
> despite the -Z flag being active?

The -Z3 implicit value does take effect, but because there is no
digit, it is padded with spaces instead of zeroes, which I apparently
overlooked.

So to clarify my original confusion, := does nothing on a parameter
declared with typeset -Z3 because it expands to be padded before
checking if it's "empty", despite actually being unset, and ::= shows
the assigned value ignoring the parameter flags (but the flags aren't
actually cleared, they just aren't used for the particular expansion
that used ::=).

Would we consider either or both of these to be bugs?

-- 
Mikael Magnusson
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.