Op 30-04-18 om 21:12 schreef Chet Ramey:
2. The bug is: 'declare +x' a.k.a. 'typeset +x' then fails to unexport the
variable in the second version above. The variable remains exported past
'typeset +x foo', as proven by grepping the output of 'env'.
Now you've just created a local variable (typeset in a function creates
local variables, even in Posix mode) and made sure it doesn't have the
export attribute. You haven't given it a value, so it remains unset and
doesn't shadow the exported global you created in step 1.
Of course, that makes complete sense.
However, when adding the -g option, on bash 4.3.30, 4.4.19 and dev
snapshot 2018-04-20:
$ bash -o posix -c 'fn() { foo=abc : ; typeset -g +x foo; env|grep
^foo=; }; fn'
foo=abc
Causing 'typeset' to operate on the global scope had no effect. I had
noticed that it made no difference, so I incorrectly figured the -g flag
wasn't relevant and left it out of my bug report.
In any case, that still looks like a bug to me... particularly as bash
4.2.45 works as expected, so it seems to break as of 4.3.
- M.