Open In App

Bash Script – Command Substitution

Improve
Improve
Like Article
Like
Save
Share
Report

In order to understand command substitution, let us first discuss substitution in shell scripts. Substitution is a functionality by following which we can instruct the shell to substitute the actual value of an expression. 

Example: 

In the program below we have firstly created variable str and assigned it with the value “GeeksforGeeks” and then substituted the value of the string str (“GeeksforGeeks”) in the echo command.

Creating a script. (you can replace `mystript` with the desired name)

vim mystript.sh

Making script executable.

chmod +x mystript.sh

393

#!/bin/sh str=’GeeksforGeeks’echo -e “str: $str”

Run the script

 ./mystript.sh

Output:

394

This article focuses on the command substitution technique used in a Bash script.

There are some sequences of characters that don’t represent their true nature but they have special meaning to the operating system and these sequences are known as escape sequences. When they are used in a command, they are replaced by actual values.

Escape Sequences Significance
 \n new line
\r carriage return
\t horizontal tab
\b backspace
 \\ backslash

Command Substitution 

Command substitution is a mechanism that is followed by programmers in a bash script. In this mechanism, the output of a command replaces the command itself. Bash operates the expansion by executing a command and then replacing the command substitution with the standard output of the command. In simple words, the output of a UNIX command is bundled and then used as a command. 

To understand it in a better way, let us consider an example. The seq command in Linux is used to print numbers from START to END in steps of INCREMENT.

Syntax:

seq START INCREMENT END  

Return type:

Print numbers from START to END each in the new line by the difference of INCREMENT.

Example:

In the below script we are printing numbers from 2 to 20 with a difference of 2. In other words, we are printing even numbers up to 20.

Creating a script. (you can replace `main` with desired name)

vim main.sh

Making script executable.

chmod +x main.sh

395

#!/bin/bash# your code goes here seq 2 2 20

Run the script

 ./main.sh

Output:

396

We can use the output of the above command as a new command. Consider the below script,  

Example:

397

#!/bin/bash# your code goes here echo $(seq 2 2 20)

Output:

398

Variables and command expansion

During the process of command substitution, the output of the command can be assigned to a variable, just like any other value.

Example:

In the below script we have assigned the result of the echo command to both the strings in variables, “varaiable1” and “variable2” respectively. Then we used these variables in the echo command.

Creating a script. (you can replace `main` with desired name)

vim main.sh

Making script executable.

chmod +x main.sh

399

#!/bin/bashvariable1=$(echo ‘Full form of gfg is’ )variable2=$(echo ‘GeekforGeeks’)echo “$variable1 : $variable2”

Run the script

 ./main.sh

Output:

400

Loss of newlines in command substitution

In the command substitution mechanism, If the output of a command that is being substituted contains any trailing newlines, then in that case the trailing newlines are deleted after the substitution. Note that embedded newlines are not deleted, but they might be removed during word splitting.

Example:

In this script, we are using the seq command. Now seq command prints numbers to the console and appends a newline character after each number is printed to the console.

401

#!/bin/bash# your code goes here seq 1 2 19

Output:

402

Example:

In this script, we have used the result of the above command and substituted it in the command. As you can see in the output, numbers from 1 to 19 with the difference of 2 are printed to console. But this time they all are printed on the same line that is without any newline character.  

403

#!/bin/bash# your code goes here echo $(seq 1 2 19)

Output:

404

Conclusion

In this article we discussed Bash Script – Command Substitution which is a useful trick that helps us take the result of one command and use it in another. We can store the command’s output in a variable or use it directly in a new command. It makes your scripts more flexible and efficient, automating tasks easily. Just remember that sometimes newlines may disappear from the output, so be careful with formatting. With command substitution, our Bash scripts become more powerful and can do things quickly and effectively.



Last Updated : 31 Jul, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads