set -o posix
t() {
local x
BAR=a eval true
}
BAR=b; t; echo $BAR
Bash documentation claims the following (section 6.11 point 23):
""" Assignment statements preceding posix special builtins persist in
the shell environment after the builtin completes."""
The above example should always print "a" but with "#local x" commented
it prints "b". This is obviously wrong; the x variable is not even used.
This can be reproduced on all versions of bash since at least bash-3.0
(probably on bash-2 as well). I also checked Debian's dash as an
alternative posix-compliant shell and it always prints "a" as expected.
For reference, ksh93, busybox ash and zsh (with setopt posixbuiltins)
print "a"
See if the attached patch does the trick.
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU ch...@case.edu http://cnswww.cns.cwru.edu/~chet/