bug-bash
[Top][All Lists]
Advanced

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

Re: "local -g" declaration references local var in enclosing scope


From: Greg Wooledge
Subject: Re: "local -g" declaration references local var in enclosing scope
Date: Sun, 10 Mar 2024 17:36:13 -0400

On Sun, Mar 10, 2024 at 04:01:10PM -0400, Lawrence Velázquez wrote:
> Basically, without an assignment, "local -g" does nothing.

Well, the original purpose of -g was to create variables, especially
associative arrays, at the global scope from inside a function.

I think this thread has been asking about a completely different
application, namely to operate upon a global scope variable from
within a function where a non-global scope variable is shadowing the
global one.

(As far as I know, there isn't any sensible way to do that in bash.)


Here it is in action.  "local -g" (or "declare -g") without an assignment
in the same command definitely does things.

hobbit:~$ f() { declare -g var; var=in_f; }
hobbit:~$ unset -v var; f; declare -p var
declare -- var="in_f"


I think the key to understanding is that while "local -g var" creates
a variable at the global scope, any references to "var" within the
function still use the standard dynamic scoping rules.  They won't
necessarily *see* the global variable, if there's another one at a
more localized scope.



reply via email to

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