On Thu, 12 Feb 2009, Shane Hathaway wrote:

This is a problem with bash - that is if one function calls another the value of the local variables are seen.

It's a surprise, but it follows the bash documentation.

$ help local
local: local name[=value] ...
   Create a local variable called NAME, and give it VALUE.  LOCAL
   can only be used within a function; it makes the variable NAME
   have a visible scope restricted to that function and its children.

The "... and its children" specification is different from most programming languages that I'm familiar with. I guess bash searches the call stack for variables, rather than use scoping rules like most languages. Another reason not to write anything complex in bash. :-)

This is just like Perl's "local", which provides temporary scoping to a global variable. It's not much used, with "my" being more what people are usually looking for. See man perlsub for details, section "Temporary Values via local()".

I wouldn't be surprised if bash borrowed the behavior & the name from Perl.

Jon

--
Jon Jensen
End Point Corporation
http://www.endpoint.com/

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to