On Tuesday, February 24, 2026, Luca Saiu <[email protected]> wrote: > Hello. > > I was surprised to discover that the following two lines behave > differently: > > > f () { a=$(false); echo $?; }; f # This prints 1 as expected > > f () { local a=$(false); echo $?; }; f # This prints 0 > > The way I interpret this is that making the variable local “counts as a > statement”, and overwrites the value of $? with 0, since making the > variable local succeeds. Is this correct? Is this the intended > semantics? I certainly find it counterintuitive, and cannot see it > being documented.
local is a command like everything else, `echo a=$(false)' returns 0 as well. You can always do local a a=$(false) instead. > > Thanks, and thanks for your precious work on Bash. > > -- > Luca Saiu https://ageinghacker.net > GNU Jitter https://www.gnu.org/software/jitter > GNU epsilon https://www.gnu.org/software/epsilon > pEp-mail-tool https://codeberg.org/pEp/pEp-mail-tool > > I support everyone's freedom of mocking any opinion or belief, no > matter how deeply held, with open disrespect and the same unrelented > enthusiasm of a toddler who has just learned the word "poo". > -- Oğuz
