Whenever we declare a variable in a script, it is accessible to all functions. The variable is global by default. If the variable is modified by any line of script or any function, it will be modified in global scope. This may create problems in certain situations. We will see this problem in the following script function_12.sh:
#!/bin/bash
name="John"
hello()
{name="Maya"
echo $name
}
echo $name# name contains John
hello# name contains Maya
echo $name# name contains MayaTest the script as follows:
$ chmod +x function_12.sh $ ./function_12.sh
Output:
John Maya Maya
To make a variable local, we declare it as follows:
local var=value local varName
Let's write the script function_13.sh as follows:
#!/bin/bash
name="John"
hello()
{local name="Mary"
echo $name
}
echo $name# name contains John
hello# name contains Mary
echo $name# name contains JohnTest the script as follows:
$ chmod +x function_13.sh $ ./function_13.sh
Output:
John Mary John
The command local can only be used within a function. The keyword local limits the scope of the variable to the function. In the previous script, we initially declared the variable name; it has global scope. This variable name has the content John. Then, we have declared the local variable name in the function hello. This local variable name is initialized to Mary. Then, outside of the function hello, we again access the global variable name, which has the content John.