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

Re: surprise with echo

20.12.2014, 08:39, "Ray Andrews" <rayandrews@xxxxxxxxxxx>:
> On 12/19/2014 09:08 PM, Lawrence Velázquez wrote:
>>  You still don't understand what's going on. The expansion only results
>>  in a null result *if the array itself is empty*. Null *elements* do
>>  not produce the same behavior.
> Yes, I understand it, I just spoke poorly.
>>  Agreed. That's why enabling RC_EXPAND_PARAM by default should never
>>  happen.
> I'd say that if it worked the way Kurtis showed that it's 'supposed' to work
> then that would be the best of all possible worlds.  But it's just my 1/2
> cent, I don't value my own opinion on this beyond that.
>>>  OTOH Bart just showed how the surprise can be avoided so ....
>>  It's only a surprise if you enable the option without understanding
> what it does first.
> Too true.
>> clang -I${include_dirs} test.c What would be the point of this
> expanding to "clang -I test.c"? It seems entirely reasonable to drop
> that word entirely and expand to "clang test.c", which is what actually
> happens. vq
> Well, whatever more experienced people think.  I have no skin in the
> issue, but my intuitive sense of it is than a 'nothing' should just be
> nothing, but it shouldn't go killing things that are not nothing.  It's
> probably not debatable, and it doesn't matter anyway.  Especially if
> there are other examples of that sort of thing, then it might not be
> considered a surprise.  But if that's the only place where it happens,
> then I'd say it's questionable. That expansion is sure cool, but I don't
> think it should kill entire strings: echo "what's wrong with this
> string? $@", especially since it leaves it alone if we use " $* ".
> Dunno.  All I can say is that rc itself seems to agree with me.

When thinking about RC_EXPAND_PARAM I think of it as applying `map` to an array that prepends/appends strings. As such `-I${include_dirs}` with empty $include_dirs does not kill an a string. It just transforms an empty array to an empty array and that’s all. You don’t think that e.g. `map(lambda v: '-I' + v, lst)` (Python) should produce `['-I']` for the empty list, do you?

I though use $^ and not RC_EXPAND_PARAM in which case it is clear that an array is treated specially. It also does not work inside `""` which makes it even more clear. If RC_EXPAND_PARAM was on always I would find it logical, but unexpected and not convenient.

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