On Sat, 21 Dec 2024, 04:01 Zachary Santer, <zsan...@gmail.com> wrote:
> On Fri, Dec 20, 2024 at 11:50 AM Greg Wooledge <g...@wooledge.org> wrote: > > I don't think your definition of "explicit" matches mine. > > ${variable} and ${| command; } are explicit expansions in the sense > that I had to write them in the script for the expansions they specify > to be performed. As opposed to PS2, which bash will happily expand > without the user having to type ${PS2} anywhere. > I'm with Greg on this. At no point do we write «$REPLY» and that makes the expansion implicit not explicit. > > If I, as the programmer, managed to misspell REPLY or forget to set it > in some codepath, I'd rather bash tell me > Those are two very different failure modes, and the fact that set -u conflates them is most of the reason that some of us object so vehemently to it. > That limitation of course is because - unlike most contemporary languages - the shell fails to distinguish "unset" from "nonexistent". (This lack also leads directly to some arcane behaviour around « local ».) -Martin