Subject: Re: [RFC] shell: local x=$1 may need to quote the RHS

From: Taylor Blau <[email-masked]>
Date: Tue, 25 Jan 2022 15:19:17 -0500

On Tue, Jan 25, 2022 at 11:00:39AM -0800, Junio C Hamano wrote:
> Konstantin Khomoutov <[email-masked]> writes:
>
> > Sorry, I might have not followed the entire thread, but assignment in
> > `local` is a bashism, and dash can only handle the declaration part with
> > `local`, not assignment; hence the safe code should read
> >
> >   local x
> >   x="$1"
>
> Interesting.  As "local" is not in POSIX but we still use it for
> convenience, we must limit our use to a reasonable subset of
> features common to the shells we care about.  Knowing what each
> shell can and cannot do safely is essential to us.
>
> The patch posted seemed to run fine with a more recent dash than
> what I had trouble with (0.5.10 would work fine with "$1" quoted,
> 0.5.11 would work fine without $1, just like the RHS of a regular
> assignment).  In addition, there are many existing tests that
> already use "local var=initial-value" (the message you are
> responding to has an output from "grep") and we haven't got problem
> reports from dash users about them.

Yeah; bisecting dash with your example script pointed me at cbb71a8
(eval: Add assignment built-in support again, 2018-05-19), which indeed
appears in v0.5.11 (and all subsequent versions).

cbb71a8 points at release 0.3.8-15, which predates Git (and a tag
pointing at it was never created, since it's behind the big "initial
import" commit at the beginning of dash.git's history). But skimming
ChangeLog.O, we see:

    * Removed assignment builtins since it is at best undefined by the
      SuS and also can't be implemented consistently.

So this probably didn't work at all between that 0.3.8-15 up until v0.5.11.

> The manual page for recent dash may need an update.
> Can you perhaps file a bug on their documentation?

Yes, I agree that dash.1 is out-of-date after cbb71a8. Konstantin:
please feel free to use any of this if it's helpful to you in creating a
bug report for the dash folks.

Thanks,
Taylor