Monday, April 24, 2017

Bash variables scope

Bash variables scope


Bash variables are defaults to global

What makes a variable local?

  • A variable declared as local is one that is visible only within the block of code in which it appears. It has local "scope." In a function, a local variable has meaning only within that function block.
    Ex:
    local variable name

func ()
{
local loc_var=23
# Declared as local variable.
# Uses the local builtin.
echo ""loc_var" in function = $loc_var"
global_var=999

# Not declared as local.
# Defaults to global.
echo ""global_var" in function = $global_var"
}

func
# Now, to see if local variable "loc_var" exists outside function.

echo ""loc_var" outside function = $loc_var"

# $loc_var outside function =
# No, $loc_var not visible globally
.

echo ""global_var" outside function = $global_var"

# $global_var outside function = 999
# $global_var is visible globally
.
exit 0
  • Before a function is called, all variables declared within the function are invisible outside the body of the function, not just those explicitly declared as local

func ()
{
global_var=37

# Visible only within the function block
# before the function has been called.

} # END OF FUNCTION

echo "global_var = $global_var"
# global_var =
# Function "func" has not yet been called,
# so $global_var is not visible here.

func

echo "global_var = $global_var"
# global_var = 37 Has been set by function call.

  • Using the declare builtin restricts the scope of a variable

foo ()
{
FOO="bar"
}


bar ()
{
foo
echo $FOO
}

bar
# Prints bar

However . . .

foo (){
declare FOO="bar"
}
bar ()
{
foo
echo $FOO
}
bar
# Prints nothing.

Available link for download