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

Re: [PATCH] typeset: set $? on incidental error



On Mon, Jan 18, 2016 at 5:38 AM, Mikael Magnusson <mikachu@xxxxxxxxx> wrote:
> On Mon, Jan 18, 2016 at 3:25 AM, Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx> wrote:
>> Mikael Magnusson wrote on Fri, Jan 15, 2016 at 15:46:09 +0100:
>>> On Fri, Jan 15, 2016 at 7:26 AM, Daniel Shahaf <d.s@xxxxxxxxxxxxxxxxxx> wrote:
>>> > Eric Cook wrote on Thu, Jan 14, 2016 at 00:24:36 -0500:
>>> >> On 01/13/2016 07:13 PM, Daniel Shahaf wrote:
>>> >> > The 'typeset' family of builtins doesn't set $? when one would expect it
>>> >> > to do so:
>>> >> >
>>> >> >     % x=$(true) y=$(exit 42); echo $?
>>> >> >     42
>>> >> >     % local x=$(true) y=$(exit 42); echo $?
>>> >> >     0
>>> >> >
>>> >> > This patch makes 'typeset' behave as ordiary assignment does.
>>> >>
>>> >>
>>> >> But who expects that?
>>> >
>>> > I did.
>>>
>>> local/typeset is a command, and it was successful, so I don't see why
>>> $? should be set to anything else than 0.
>>> % true x=$(false); echo $?
>>> 0
>>> is technically exactly the same situation as your above second command.
>>
>> I wouldn't call it successful: I asked for the parameter x to be created
>> as a scalar and assigned a value and only part of my request was
>> accomplished.
>
> That's not true, the parameter is created and assigned the value you
> asked for (your command subst had empty output so the parameter is ""
> but if you did local y=$(echo hi; exit 42) it would be "42".)

It would be "hi" rather, of course.

-- 
Mikael Magnusson



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