On Thu, Jul 11, 2024, at 9:42 AM, Dr. Werner Fink wrote: > I've a report that with later bash the following which works in bash-4.2 > > [...] > > linux-40cm:~ # x () { > > local x=y > > declare -p x > > echo $x > > unset x > > declare -p x > > echo $x > > } > linux-40cm:~ # x > declare -- x="y" > y > -bash: declare: x: not found > > but with bash-5.X the reporter sees (and complains) > > sl15sp5:~ # x () { > > local x=y > > declare -p x > > echo $x > > unset x > > declare -p x > > echo $x > > } > sl15sp5:~ # x > declare -- x="y" > y > declare -- x > > ... for global variables it works as expected.
I won't speculate about the issue, but your subject goes too far. The variable really is unset here: % cat /tmp/x.bash x() { local x=y declare -p x echo "x is ${x-unset}" unset x declare -p x echo "x is ${x-unset}" } x % bash /tmp/x.bash declare -- x="y" x is y declare -- x x is unset -- vq