On Wed, May 5, 2010 at 01:57, Freddy Vulto <fvu...@gmail.com> wrote: > It appears that `unset' is capable of traversing down the call-stack and > unsetting variables repeatedly: > > a=0 b=0 c=0 d=0 e=0 > _unset() { unset -v b c c d d d e; } > t1() { > local a=1 b=1 c=1 d=1 > t2 > } > t2() { > local a=2 b=2 c=2 d=2 e=2 > _unset > echo a:$a b:$b c:$c d:$d e:$e > } > t1 # Outputs: a:2 b:1 c:0 d: e:0 > # ^ ^ ^ ^ ^-- unset once (skipped t1) > # | | | +----- unset thrice to global > # | | +--------- unset twice till global > # | +------------- unset once till t1 > # +----------------- unset not > > It seems to work on bash-3.0, 3.2, 4.0 and 4.1. > Is this a bug or a feature? >
When I revisit this 2 years old thread I don't understand why following foo() function does not output the global var: $ cat foo.sh var=global foo() { local var=foo unset var echo foo: $var } bar_unset() { unset var } bar() { local var=bar bar_unset echo bar: $var } foo bar $ bash foo.sh foo: bar: global $ In foo() it unsets its local var so why doesn't the subsequent $var refer to the global var? > > Freddy Vulto > http://fvue.nl/wiki/Bash:_passing_variables_by_reference > > >