In bash scripts, assigning the output of a command to variables can be convinient by storing the outputs of the commands and using them later.

In this short guide, we will take a look at how you can store the output of a command as a variable in Bash.

The Basics To Set Up Variables

Saving the output of a command as a variable is achieved through command substitution. Command substitution is a wrapper that executes the command in a subshell environment, and replaces the wrapped command with the standard output of the environment in which the command was run. This output can then be referenced later, if connected to a reference variable!

Command substitution can be achieved through backticks or the dollar sign with parentheses:

`command` $(command)

There’s debate as to whether `command` (backticks) or $(command) (dollar sign and parentheses) should be used as the “best practice”. $(command) works well in nesting, and improves readability in some cases, but you can go with either syntax in the proceeding examples.

That being said – assigning the output of a command to a variable in Bash is as easy as:

echo "${VARIABLE}"

Running ${variable} is known as parameter expansion, and is used to evaluate and fetch the value associated to a reference variable.

Let’s now take a look at the simple example of setup a variable for a command to change the output color:

GREEN=$(tput setaf 2)
echo "${GREEN}Please" ORANGE=$(tput setaf 9)
echo "${ORANGE}Visit" echo "${GREEN}Paris"

In the snippet, we’ve used the tput command and assigned the returned value of those commands to print colorful text. The setaf changes the foreground color, and 3 (green) and 9 (orange) are color codes.

Now we’ll move on to another example that contains multiple conditions to set up variables for different commands:

echo -e "Hey ${PERSON}! I am Charlie\n" DETAILS=$(uname -a)
echo -e "You're running this script on:\n${DETAILS}\n" DATES=$(date)
echo -e "The script is being run on:\n${DATES}\n" CREATE=$(touch $(date +"%d%m%Y").txt)
echo -e "A text file logging this run is created.${CREATE}\n" LOCATION=$(ls \ -l *txt)
echo -e "Saved text file at: ${LOCATION}"

In the above script, the whoami command returns the current user’s username. The uname -a returns the system information, and the date returns the current time and date.

Note: We can chain variable assignment by adding multiple commands in a single nested call. The CREATE variable contains the output of the touch command, which in turn creates a file and sets the filename to the output of the date +"%d%m%Y command.

Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!

Finally, we add a multiline command variable assignment concept by adding a backslash (\) between the ls command -l flag to display only text files using *.txt. The backslash is an escape character that informs the shell not to interpret the next character.

In the echo command, we added the -e flag to use the special character, i.e., \n (newline), to print the output in the new line.

We get the following result after executing the script:

$ ./


In this short guide, we’ve taken a look at how you can set the output of a command to a variable in Bash. We’ve taken a look at the difference between the syntaxes for command substitution, noting the readability improvements of $(command) over backtick-based substitution. Then, we’ve taken a look at several examples of both simple assignment and chained/nested output assignment.