On Tue, Jan 25, 2022 at 11:00:39AM -0800, Junio C Hamano wrote: > Konstantin Khomoutov <kostix@xxxxxxxx> 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