Skip to main content

Understanding Environment And Shell Variables

To effectively manage and troubleshoot the Linux environment, understanding and examining the environment is crucial. A Linux environment is made up of a series of configurable values known as environment and shell variables, which control the behavior of the shell and the user's sessions.

How To Examine the Environment

To examine the environment in Linux, the printenv command is extensively used. It is capable of printing all or part of the environment. When paired with less, the command is even more valuable, allowing users to view the environment variables one screen at a time.

printenv | less

This command prints all the environment variables to the screen and allows you to scroll through them with ease, thanks to less.

What are Environment Variables?

Environment variables are key-value pairs stored in the user's environment and are used by the operating system to manage the behavior of applications and services. They contain information about the system environment, like the shell in use, the home directory, and the user name.

Use and Purpose of Environment Variables

Environment variables serve to:

  • Configure System Behavior: They dictate how the system behaves and responds to the user.
  • Store System Information: They hold data related to system paths, user information, and home directories.
  • Facilitate Application Configuration: They aid in configuring applications without altering their code, enabling applications to behave differently under varying environments.

What are Shell Variables?

Shell variables are variables that are defined within the shell and are typically used to store temporary values that are needed by shell scripts. They are local to the shell session and are not available to child processes unless exported.

Differences between Shell Variables and Environment Variables

AspectShell VariableEnvironment Variable
ScopeLocal to the current shell session. Not available to subshells or child processes unless exported.Initially declared in a user's session and is accessible by the shell and all its child processes, including any subshells and commands that are executed. It remains available across different sessions of a user.
ExportabilityNeeds to be explicitly exported to be available to child processes as an environment variable.Once declared and exported, it is automatically available to all child processes and does not need to be re-exported.
Use CaseTypically used to store temporary values for shell scripts.Used to configure system behavior and hold information that configures the running environment, and to share configuration settings between applications.
DeclarationDeclared without using the export command.Typically declared using the export command and can be accessed and modified using shell built-in commands like printenv, set, and unset.

In essence, environment variables have a broader scope, affecting the user's entire session and all the processes spawned from it, while shell variables have a more localized scope, restricted to the shell session they were created in unless exported as environment variables.

Listing All Available Shell Variables in a Session

To get a comprehensive view of all the shell variables in a session, you can use built-in shell commands. These variables are essential, as they hold temporary data needed by the shell scripts and can be crucial for debugging and scripting tasks.

Using the set Command

The set command in Unix and Linux is used to set and unset certain flags or settings within the shell environment. When used without any options, it will list all the shell variables, including environment variables, functions, and aliases, in the current session.


This command will list all the variables defined in the shell session, and you can scroll through them to view their values. To make the output more manageable, especially when dealing with a large number of variables, you can pipe the output to less or grep to search for a specific variable:

set | less


set | grep VARIABLE_NAME

Examining Specific Variables

To print some important environment variables, you can use the echo command, like so:

echo $USER

This will print the current username to the screen.

Similarly, to print the home directory of the current user, you can use:

echo $HOME

These are just examples, but you can replace $USER and $HOME with any other environment or shell variable to print their values to the screen.


Understanding the Linux environment involves acquainting oneself with environment and shell variables, the backbone of system and application configuration. The printenv command, combined with less, provides an efficient way to examine environment variables, providing crucial insights into system configurations, paths, and user information. Differentiating between shell and environment variables is pivotal, given their differing scopes and use cases, aiding in effective system interaction and scripting. By mastering these aspects, one can gain a comprehensive understanding of the Linux environment, allowing for more proficient system navigation and management.

What Can You Do Next 🙏😊

If you liked the article, consider subscribing to Cloudaffle, my YouTube Channel, where I keep posting in-depth tutorials and all edutainment stuff for software developers.

YouTube @cloudaffle