≑ Menu

Bash Variable Tutorial – 6 Practical Bash Global and Local Variable Examples

This article is part of our on-going bash tutorial series. Like any other programming languages, Bash also provides variables.

Bash variables provide temporary storage for information that will be needed during the lifespan of the program.



Note: There should not be any space around “=” sign in variable assignment. When you use VAR=VALUE, shell sees the “=” as a symbol and treats the command as a variable assignment. When you use VAR = VALUE, shell assumes that VAR must be the name of a command and tries to execute it.

Shell does not care about the type of variables. Variables could store strings, integers, or real numbers.

Example.1 Simple Bash Variable Assignment Usage

The following script creates a variable called LIST and assigns the value “/var/opt/bin”. To access the variables, just prefix the variable name with $, which will give you the value stored in that variable.

$ cat sample.sh
ls -l $LIST

Execute the above script, which will list the /var/opt/bin in long format as shown below.

$ ./sample.sh
total 8
drwxrwsr-x 2 bin  bin 4096 Jan 29 06:43 softwares
drwxr-sr-x 5 root bin 4096 Sep  2  2009 llist

Bash Variable Scope – Local and Global

In Bash, variables do not have to be declared. But, when you access the variable which is not used so far, you will not get any warning or error message. Instead, it will display a blank value.

Example 2. Blank values in bash variables

$ cat var1.sh
echo "Variable value is: $VAR1"
echo "Variable value is: $VAR1"

$ ./var1.sh
Variable value is:
Variable value is: GEEKSTUFF

As shown above, initially the variable will have a blank value, after assigning, you can get your values. export command is used to export a variables from an interactive shell. export shows the effect on the scope of variables.

Example 3. Bash Variables without export

Assign a variable with a value in an interactive shell, and try to access the same in your shell script.


$ cat var2.sh
echo "VAR2=$VAR2"
echo "VAR2=$VAR2"

Now, execute the above script as shown below.

$ ./var2.sh

Still you will get blank value for variable VAR2. The shell stores variable VAR2 with the LINUX only in the current shell. During the execution of var2.sh, it spawns the shell and it executes the script. So the variable VAR2 will not have the value in the spawned shell. You need to export the variable for it to be inherited by another program – including a shell script, as shown below.

Example 4. Exporting a Bash Variable

$ export VAR2=LINUX

$ cat var2.sh
echo "VAR2=$VAR2"
echo "VAR2=$VAR2"

Now execute the above script.

$ ./var2.sh
$echo $VAR2

Now, you can notice that after execution of the shell script var2.sh, the value of VAR2 is LINUX. Because the variables will not be passed back to your interactive shell, unless you execute the script in the current shell.

Declaring a Bash Variable

Using declare statement in bash, we can limit the value assigned to the variables. It restricts the properties of variables. Option in a declare statement is used to determine the type of a variable.


declare option variablename
  • declare is a keyword
  • option could be:
    • -r read only variable
    • -i integer variable
    • -a array variable
    • -f for funtions
    • -x declares and export to subsequent commands via the environment.

Example 5. Declaration of Bash variable using declare

$ cat declar.sh
declare -i intvar
intvar=123 # Assigning integer value.
echo $intvar
intvar=12.3 #Trying to store string type value to an integer variable
echo $intvar

declare -r rovar=281
rovar=212 # Trying to change the readonly variable.

From the below execution, you can notice the error message when you assign invalid data to a variable.

$ ./declar.sh
t.sh: line 6: 12.3: syntax error: invalid arithmetic operator (error token is ".3")
t.sh: line 11: rovar: readonly variable

Global Bash Variables

Global variables are also called as environment variables, which will be available to all shells. printenv command is used to display all the environment variables.

$ printenv

Local Bash Variables

Local variables are visible only within the block of code. local is a keyword which is used to declare the local variables. In a function, a local variable has meaning only within that function block.

Example 6. Global and Local Bash Variables

$ cat localvar.sh
  local lvar="Local content"
  echo -e "Local variable value with in the function"
  echo $lvar
  gvar="Global content changed"
  echo -e "Global variable value with in the function"
  echo $gvar

gvar="Global content"
echo -e "Global variable value before calling function"
echo $gvar
echo -e "Local variable value before calling function"
echo $lvar
echo -e "Global variable value after calling function"
echo $gvar
echo -e "Local variable value after calling function"
echo $lvar

Execute the above script,

$ sh t.sh
Global variable value before calling function
Global content
Local variable value before calling function

Local variable value with in the function
Local content
Global variable value with in the function
Global content changed
Global variable value after calling function
Global content changed
Local variable value after calling function

In the above output, local variables will have only empty value before and after calling the function. Its scope is only with in the function. It got vanished out of the function, whereas the global variable has the updated value even after the function execution.

If you enjoyed this article, you might also like..

  1. 50 Linux Sysadmin Tutorials
  2. 50 Most Frequently Used Linux Commands (With Examples)
  3. Top 25 Best Linux Performance Monitoring and Debugging Tools
  4. Mommy, I found it! – 15 Practical Linux Find Command Examples
  5. Linux 101 Hacks 2nd Edition eBook Linux 101 Hacks Book

Bash 101 Hacks Book Sed and Awk 101 Hacks Book Nagios Core 3 Book Vim 101 Hacks Book

{ 5 comments… add one }

  • patolfo May 3, 2010, 9:01 am

    Can you elaborate on this piece of code:

    var=$(cat file.txt)

    How do i convert the above to an indexed array, list…?

  • dj May 4, 2010, 8:55 am

    Under Declaring a Bash Variable”, you can add -A. Bash version 4 introduced associative arrays.

    Have you seen anything to be gained, performance wise, when declaring a string that requires no substitution with single quotes vs double quotes.


  • patolfo May 4, 2010, 10:22 am

    Not at all, but i prefer cat command or l πŸ™‚
    By the way we are using bash 3 πŸ™
    so it is not possible, to use the -A array, i am not the admin either

  • nix July 25, 2010, 6:46 pm

    Can you elaborate on this piece of code:
    var=$(cat file.txt)
    How do i convert the above to an indexed array, list…?

    The above reference is command substitution; it functions like using back ticks IE:
    `cat file.txt`.

    So the out put of the command is stored in the variable var.

    If you echo $var it will be one long line
    If you echo “$var” it will appear as it does in the text file.

    You can think of it as a one line array. Array’s can have an index or may not be indexed at all. You can still loop through each element. Might depend on the version of bash if it needs to be quoted or not. I forget how 2.x and 3.x worked… Sorry I am on version 4.x…

    If you want an index; you have to create a counter variable. As each line is read; you increment that counter. There are various ways to populate an (indexed) array. You can use the read command, process substitution and back ticks with a variable.

    Check out the BASH guides at the TLDP for various ways to populate an array.

  • Daniel Metcalfe October 12, 2015, 9:51 am

    Thanks for writing this article. Couldn’t find much good newbie level material on bash variables but this really helped me out.

Leave a Comment