As a system administrator, you probably know how important environment variables are in Bash.
Environment variables are used to define variables that will have an impact on how programs will run.
In Bash, environment variables define many different things : your default editor, your current username or the current timezone.
Most importantly, environment variables can be used in Bash scripts in order to modify the behaviour of your scripts.
In this tutorial, we are going to see how you can easily set environment variables in Bash.
Set Environment Variables in Bash
The easiest way to set environment variables in Bash is to use the “export” keyword followed by the variable name, an equal sign and the value to be assigned to the environment variable.
For example, to assign the value “abc” to the variable “VAR“, you would write the following command
$ export VAR=abc
If you want to have spaces in your value, such as “my value” or “Linus Torvalds“, you will have to enclose your value in double quotes.
$ export VAR="my value" $ export VAR="Linus Torvalds"
In order to display of your environment variable, you have to precede the variable with a dollar sign.
$ echo $VAR Linus Torvalds
Similarly, you can use the “printenv” command in order to print the value of your environment variable.
This time, you don’t have to precede it with a dollar sign.
$ printenv VAR Linus Torvalds
Setting variables using Bash interpolation
In some cases, you may need to set a specific environment variable to the result of a command on your server.
In order to achieve that, you will need Bash interpolation, also called parameter substitution.
Let’s say for example that you want to store the value of your current shell instance in a variable named MYSHELL.
To set an environment variable using parameter substitution, use the “export” keyword and have the command enclosed in closing parenthesis preceded by a dollar sign.
$ export VAR=$(<bash command>)
For example, given our previous example, if you want to have the “SHELL” environment variable in a new variable named “MYSHELL”, you would write
$ export MYSHELL=$(echo $SHELL)
Congratulations, you have successfully created your first environment variable in Bash!
Setting Permanent Environment Variables in Bash
When you assign a value to a variable using “export” in a shell, the changes are not persisted on reboots or to other shells.
In order to set a permanent environment variable in Bash, you have to use the export command and add it either to your “.bashrc” file (if this variable is only for you) or to the /etc/environment file if you want all users to have this environment variable.
$ nano /home/user/.bashrc # Content of the .bashrc file export VAR="My permanent variable"
For the changes to be applied to your current session, you will have to source your .bashrc file.
$ source .bashrc
Now, you can check the value of your environment variable in every shell that you want.
$ printenv VAR
This variable will be created on every shell instance for the current user.
However, if you add it to the “/etc/environment” file, the environment variable will be set for all the users on your system.
$ nano /etc/environment # Content of the environment file export GLOBAL="This is a global variable"
After sourcing the file, the environment variables will be set for every user on your host.
$ source /etc/environment $ echo $GLOBAL
Awesome, you have successfully set a global environment variable on your server!
In this tutorial, you learnt how you can easily set environment variables in Bash using the export command.
You also learnt that changes are not made permanent until you add them to your :
- .bashrc : if you want the variable to be only for the current user logged-in;
- /etc/environment : if you want the variable to be shared by all the users on the system.
If you are interested in Linux System Administration, or in Bash, we have a complete section dedicated to it on the website, so make sure to check it out!
thanks for the info
the pane on the left side of this sight is horrible for portrait oriented monitors.
Super..it cut to the chase, now I can run aliases which call variables, as they are set in my bashrc. Took me an hour to unearth this!!