bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Passing variables by reference conflicts with local


From: Chet Ramey
Subject: Re: Passing variables by reference conflicts with local
Date: Wed, 05 May 2010 09:43:29 -0400
User-agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4

On 5/4/10 1:57 PM, Freddy Vulto 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?

It's not a bug.  A feature is what you make of it.  Consider that unset
processes its arguments beginning to end, so the above function body
could equivalently be written as a series of unset commands:

unset -v b
unset -v c
unset -v c
unset -v d
        ...and so on...

Then think about the state of the bash variable contexts after each
command.

Chet
-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU    chet@case.edu    http://cnswww.cns.cwru.edu/~chet/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]