On Mon, Feb 06, 2023 at 10:18:30AM -0500, Dale R. Worley wrote: > The behavior of bash appears to be is "future changes in shell options > using the 'set' builtin inside the current function invocation are > restored to their prior values when the function returns".
Perhaps, the wording of the documentation is not great, but I don't think it would make sense to expect `set -C; local -' to only set noclobber in the dynamic scope of the current function, instead of the previous scope. `var=foo; local var; var=bar' works the same way, but running `local var' after that does set var to "bar" in the previous scope. With the current implementation, calling local - a second time "commits" the changes to shell options happened after the previous local - call. This patch simply makes multiple calls to local - a no-op to match the behaviour of local - in other shells, and avoid nasty surprises. emanuele6