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
>
>
>

Reply via email to