[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Passing variables by reference conflicts with local
From: |
Clark Wang |
Subject: |
Re: Passing variables by reference conflicts with local |
Date: |
Mon, 23 Apr 2012 16:56:09 +0800 |
On Wed, May 5, 2010 at 01:57, Freddy Vulto <fvulto@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
>
>
>
- Re: Passing variables by reference conflicts with local,
Clark Wang <=