On 100503 08:57, Chet Ramey wrote:
> > On Sat, May 01, 2010 at 04:26:16AM -0500, Dennis Williamson wrote:
> >> I prefer to avoid using eval by using declare, but declare inside a
> >> function makes the variable local. Wouldn't it be nice to have a
> >> global flag (declare -g) like zsh's typeset -g.
> I am planning a feature like this for a future release. It may end up
> in bash-4.2.
What I'm happily exploiting in this thread (and trying to get consent
for) is the fact that declaring a global within a function does NOT
automatically make the variable global, but instead allows one to pass
variables between functions. In this light I also find the term
"global" misleading.
This thread is still leaving me with the feeling I'm doing something
wrong. Is this a documented and maintained bash feature? Can we safely
apply this feature to the bash-completion package? Will a `declare -g'
preserve the existing behaviour in say bash-4.2?
In other words: is it safe to exploit the behaviour below - 'a=A b=B'
not becoming global?
a=1; unset b
t() {
a=A b=B
}
u() {
local a b
t
echo $a $b
}
u # Outputs "A B"
echo $a $b # Outputs "1 ": globals aren't touched nor created
Freddy Vulto
http://fvue.nl/wiki/Bash:_passing_variables_by_reference