[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/
- Re: Passing variables by reference conflicts with local, (continued)
- Re: Passing variables by reference conflicts with local, Dennis Williamson, 2010/05/01
- Re: Passing variables by reference conflicts with local, Pierre Gaston, 2010/05/01
- Re: Passing variables by reference conflicts with local, Freddy Vulto, 2010/05/01
- Re: Passing variables by reference conflicts with local, Dennis Williamson, 2010/05/01
- Re: Passing variables by reference conflicts with local, Freddy Vulto, 2010/05/01
- Re: Passing variables by reference conflicts with local, Dennis Williamson, 2010/05/01
- Re: Passing variables by reference conflicts with local, Freddy Vulto, 2010/05/02
- Re: Passing variables by reference conflicts with local, Dennis Williamson, 2010/05/02
- Re: Passing variables by reference conflicts with local, Freddy Vulto, 2010/05/03
- Re: Passing variables by reference conflicts with local, Freddy Vulto, 2010/05/04
- Re: Passing variables by reference conflicts with local,
Chet Ramey <=
- Re: Passing variables by reference conflicts with local, Chet Ramey, 2010/05/04
- Re: Passing variables by reference conflicts with local, Chet Ramey, 2010/05/02
- Re: Passing variables by reference conflicts with local, Matthew Woehlke, 2010/05/03
- Re: Passing variables by reference conflicts with local, Greg Wooledge, 2010/05/03
- Re: Passing variables by reference conflicts with local, Marc Herbert, 2010/05/04