On Mon, Jul 22, 2024 at 11:10 AM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Kyle Lippincott <spectral@xxxxxxxxxx> writes: > > > Is there an example of a shell on Linux that has this behavior that I > > can observe, and/or reproduction steps? > > Every once in a while this comes up and we fix, e.g. > > https://lore.kernel.org/git/528CE716.8060307@xxxxxxxxxxxxxxxxxxx/ > https://lore.kernel.org/git/c6efda03848abc00cf8bf8d84fc34ef0d652b64c.1264151435.git.mhagger@xxxxxxxxxxxx/ > https://lore.kernel.org/git/Koa4iojOlOQ_YENPwWXKt7G8Aa1x6UaBnFFtliKdZmpcrrqOBhY7NQ@xxxxxxxxxxxxxxxxxxxxxx/ > https://lore.kernel.org/git/20180713055205.32351-2-sunshine@xxxxxxxxxxxxxx/ Thanks, this one leads to https://lore.kernel.org/git/20180713055205.32351-1-sunshine@xxxxxxxxxxxxxx/, which references https://public-inbox.org/git/xmqqefg8w73c.fsf@xxxxxxxxxxxxxxxxxxxxxxxxx/T/, which claims that `dash` has this behavior 6 years ago. The version of `dash` I have on my machine right now doesn't seem to have this issue, but I can believe some older version does. > https://lore.kernel.org/git/574E27A4.6040804@xxxxxxxxxxxxxxxxxxxx/ > > which is from a query > > https://lore.kernel.org/git/?q=one-shot+export+shell+function > > but unfortunately we do not document which exact shell the observed > breakage happened with. > > The closest article I found that is suitable as a discussion > reignitor talks about what POSIX requires, which may be more > relevant: > > https://lore.kernel.org/git/4B5027B8.2090507@xxxxxxxxxxxxx/ This claims that `ksh` "gets it right", and I can confirm that ksh does behave this way on my Linux machine. Having just looked at the POSIX standard (I don't think I'm allowed to copy from this document), the POSIX standard (POSIX.1-2024, at least) explicitly leaves it unspecified whether the variable assignments remain in effect after function execution. Thanks for indulging my curiosity; should we include a statement in the linter along the lines of `# POSIX.1-2024 explicitly does not specify if variable assignment persists after executing a shell function; some shells, such as ksh, have these variables remain.`?