Consider following code:
function child()
{
echo $var
}
function parent()
{
local var=5
child
}
I've tested it on my machine and it seems to work but I wasn't able to find anything definitive describing such usage of local variables. Namely, when I declare a local variable in one function and from that function I call some other function, can I use the variable in the latter (and even nest it deeper)? Is it legal in bash and is it standard for all versions?
bash
uses dynamic scoping. The value ofvar
inchild
is not determined by wherechild
is defined, but by where it is called. If there is no local definition in the body ofchild
, the next place the shell looks is in the body of the function from whichchild
is called, and so forth. Thelocal
modifier creates a variable in a function that is local to that call, so it does not affect the value of the variable from any enclosing scopes. It is, though, visible to any enclosed scope.Just complimenting what user 123 already mentioned in the comments
From bash man pages
So unless specified otherwise (the local builtin), variables are visible outside the function scope, global if you will.