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

Re: RC_EXPAND_PARAM bug



> } 1. `a' was an empty array.  In that case the expansion is the empty list,
> }    and suffix is not evaluated (so even if there is a $[i++] in suffix, i
> }    will not change).
> 
> Hrm.  I think I would have expected to get prefixsuffix, with suffix
> evaluated.  That's what you get when a=("") or a="", but I can't decide
> if that represents an argument in favor, or against.

No, an empty array is very different from an array with a single empty
element.  For example a is a list of directories, and you wand a list of
files in there directories, you would say

$^a/*

If `a' is empty, you want $^a/* expand to nothing, otherwise you would
get the list of files in the root directory which you do not want.  Such
tricks are used in several zsh scripts I guess, and this is the
preferable behaviour.  And it always worked this way, that's the point
where there is not difference between versions.

> } and everything is evaluated once unless there is an rc-expansion of
> } an empty array which discards everything following that array.
> 
> It's that one that gives me pause.

One might require the evaluation of the suffix even if it is discarded
later.  Do you think it is preferable?

> } What would be the preferred evaluation of ${^a}1${^^x}?
> 
> What does the real "rc" shell do?  Duplicating it would be my first choice,
> unless it does something wildly different than any previous version of zsh.

I do not think this has anything to do with rc.  I always thought that rc
somehow comes from brace, since this kind of array expansion resembles
brace expansion.

> } Alternatives:
> } 
> } 1. a1x ay b1x by  (current)
> } 
> } 2. a1x y b1x y    (beta16 and older)
> } 
> } 3. a1x b1x y      (just an other logical solution).
> 
> The important question for me is, where are the word breaks in (2)?
> That is, if I do:
> 
>   z=(${^a}1${^^x})
> 
> What is ${#z}?  If z is ("a1x y" "b1x y"), then I think that's wrong.

It is 4.

> On Jul 30,  9:46am, Andrej Borsenkow wrote:
> } Subject: Re: RC_EXPAND_PARAM bug
> }
> } zsh-3.1.2 with RC_EXPAND_PARAM bugfix.
> } 
> } % echo ${^a}1${^^x}
> } a1x ay b1x by
> } 
> } % echo ${^^a}1${^x}
> } a b1x b1y
> } 
> } It looks illogical. Either the latter should be 'ax b1x ay b1y' or the
> } former 'a1x b1x y'. 
> 
> I agree with Andrej on that.  If you're going to map over lists, you
> have to map over them in the prefix too, not just in the suffix.
> 
> However, I don't like the behavior of (3), i.e. that when ${x} is a list
> then the word break interrupts the rc-expansion.  I'd prefer that the
> expansion proceed across the suffix in the same way regardless of whether
> x is an array or a string, and then introduce the word breaks at the end.

I do not understand exatly what you mean, but I'm leaning towards option
3.  One possible implementation is to prepend some otherwise impossible
string to suffix before expanding it, and after the expansion, check for
that, and replace it with elements of a.  The impossible string can be {
Meta, '@' } or a new metacharacter.  This seems to be a really simple to
do.  Option 2. can use the same trick, but if the modified ${^^a}1${^x}
behaviour you suggest above is also required, things become more
complicated.

Zoltan



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