Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: RC_EXPAND_PARAM bug
- X-seq: zsh-workers 3392
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxx>
- To: Zoltan Hidvegi <hzoli@xxxxxxxxxxxxxxx>
- Subject: Re: RC_EXPAND_PARAM bug
- Date: Tue, 29 Jul 1997 23:11:10 -0700
- Cc: zsh-workers@xxxxxxxxxxxxxxx (Zsh hacking and development)
- In-reply-to: <199707300516.BAA01180@xxxxxxxxxx>
- References: <199707300516.BAA01180@xxxxxxxxxx>
On Jul 30, 1:16am, Zoltan Hidvegi wrote:
} Subject: Re: RC_EXPAND_PARAM bug
}
} > I'm still not comprehending this.
}
} OK, I tell you what subst.c does.
Thank you!
} prefix${^a}suffix
}
} Suppose that prefix does not have anything to expand. paramsubst is
} called to expand this string, which expands ${^a}. There are three
} cases:
}
} 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.
} 3. `a' has more than one elements. In that case stringsubst is called
} for suffix alone (which may call paramsubst again to expand something
} in suffix), and the result will be be a list. This list is combined
} with the expansion of ${^a}. If suffix expands to an empty list, the
} result will be empty
Again I find the empty list behavior unexpected, but possibly defensible.
} This guarantees left to right evaluation, everything is evaluated at most
} once,
These are both good things.
} 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.
} 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.
} 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.
I presume you mean 4 words, though, in which case I think it's right,
in spite of what I just told Geoff. :-}
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.
That's why I prefer (2) -- but I'd still like to know how "rc" does it.
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Messages sorted by:
Reverse Date,
Date,
Thread,
Author