Bash Command Substitution Explained: Automate Scripts with $(…)
If you use Linux or work with scripts, you might have heard about Bash command substitution. At first, it may sound complex, but it is a simple and powerful tool. It allows you to run one command insi
If you use Linux or work with scripts, you might have heard about Bash command substitution. At first, it may sound complex, but it is a simple and powerful tool. It allows you to run one command inside another and use the output instantly. This detailed guide will help you understand it and apply it in real scenarios.
Table of Contents
Discover more
Scripting language
BASH
ostechnix
scripts
Shell
Linux
bash
OSTechNix
Unix
Scripting
- What is Command Substitution?
- Two Ways to Do Command Substitution
- Basic Usage
- Benefits of Command Substitution in Bash
- Practical Examples of Command Substitution
- Best Practices for Command Substitution
- Common Mistakes to Avoid
- Mini Exercises to Practice
- Frequently Asked Questions (FAQs)
- Learn Bash Scripting Today!
- Conclusion
What is Command Substitution?
Discover more
SHELL
shell
Ostechnix
scripts
scripting
Scripting
Scripting language
Linux
ostechnix
bash
Command substitution in bash is a powerful feature that lets you capture the output of one command and use it as input for another command or assign it to a variable.
To put this in simple words, Command substitution lets you take the output of a command and insert it into another command. Think of it as a way to "plug in" the result of one command into another.
Two Ways to Do Command Substitution
There are two syntaxes for command substitution:
- Backticks (older style):
`command` - Dollar-parentheses (modern style):
$(command)
The $(command) syntax is generally preferred because it's more readable and can be nested easily.
Discover more
Scripting language
shell
BASH
Bash
OSTechNix
Unix
scripts
Linux
scripting
Scripting
Basic Usage
In Bash, the modern and recommended syntax is:
$(command)
For example:
echo "Today is $(date)"
Here, date runs first, and its output replaces $(date). If today is September 3, 2025, the command prints:
Discover more
shell
SHELL
ostechnix
scripts
OSTechNix
Bash
scripting
BASH
Linux
Shells
Today is Wednesday 03 September 2025 03:07:19 PM IST
You can also use the older backtick syntax:
echo "Today is `date`"
However, $(...) is easier to read and allows nested commands, which backticks struggle with.
Benefits of Command Substitution in Bash
Command substitution has three main benefits:
- Automation – You don’t need to hardcode values.
- Dynamic scripts – Your scripts adapt automatically to system changes.
- Cleaner code – You avoid temporary files and extra steps.
For instance, instead of typing a username manually, you can write:
Discover more
OSTechNix
Shell
BASH
Unix
Scripting language
Linux
Ostechnix
bash
scripts
shell
echo "Logged in as $(whoami)"
This prints your username automatically.
Sample Output:
Logged in as ostechnix
Practical Examples of Command Substitution
Here are some common uses you can apply immediately:
Discover more
Scripting
Shells
Ostechnix
scripting
Unix
scripts
SHELL
Scripting language
Shell
Linux
1. Embed Dates in Filenames
You can assign a command's output to a variable and then get the output from that variable like below:
filename="backup-$(date +%F).tar.gz" echo $filename
Sample Output:
backup-2025-09-03.tar.gz
Discover more
Unix
Shells
shell
scripting
BASH
OSTechNix
Bash
Ostechnix
bash
Linux
This is perfect for daily backups.
Here's another example:
current_date=$(date) echo "Today is: $current_date"
Sample Output:
Today is: Wednesday 03 September 2025 04:21:50 PM IST
Discover more
Linux
Shells
OSTechNix
Bash
bash
shell
BASH
scripts
ostechnix
Shell
2. Detect System Information
Here's an example with multiple command substitutions:
echo "OS: $(uname -s), Kernel: $(uname -r), Arch: $(uname -m)"
Sample Output:
OS: Linux, Kernel: 6.14.8-2-bpo12-pve, Arch: x86_64
This helps in scripts that need system details.
Discover more
Scripting language
BASH
scripts
Unix
Scripting
Shell
Bash
Shells
scripting
OSTechNix
3. Fetch Latest Versions Dynamically
latest=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep tag_name | cut -d '"' -f4) echo "Latest Docker Compose version: $latest"
Sample Output:
Latest Docker Compose version: v2.39.2
This technique prevents hardcoding version numbers.
Discover more
bash
Shell
BASH
OSTechNix
Scripting
scripting
Linux
Ostechnix
Unix
ostechnix
4. Find Number of Files in the current Directory
Go to a directory in which you want to quickly list the number of files in it and run:
echo "There are $(ls | wc -l) files in this directory"
Sample Output:
There are 8 files in this directory
5. Nesting Commands
You can run commands inside other commands:
echo "Today is $(echo $(date +%A))"
Sample Output:
Today is Wednesday
Nesting increases flexibility and power.
6. File Operations
Backup a file with timestamp:
cp myfile.txt myfile_$(date +%Y%m%d).txt
Count files with specific extension:
echo "You have $(find . -name "*.txt" | wc -l) text files"
7. Conditional Operations
Check disk space:
if [ $(df / | tail -1 | awk '{print $5}' | sed 's/%//') -gt 90 ]; then
echo "Disk space is running low!"
fi
8. Loop through Command Output
Process each file:
for file in $(ls *.log); do
echo "Processing $file"
# do something with $file
done
Best Practices for Command Substitution
1. Always use $(...) instead of backticks. It is clearer and supports nesting.
# This works with $() but would be messy with backticks result=$(echo "Today is $(date +%A)")
2. Whitespace handling
Command substitution removes trailing newlines and converts internal newlines to spaces:
# If 'ls' outputs multiple lines, they become space-separated files=$(ls) echo $files # Shows files separated by spaces
3. Quote your substitutions if the output contains spaces:
name="$(whoami)"
4. Use variables to make scripts more readable:
os=$(uname -s) arch=$(uname -m) echo "OS: $os, Arch: $arch"
5. Combine with pipes to process data dynamically:
echo "Top 5 processes: $(ps aux | sort -nrk 3,3 | head -5)"
Common Mistakes to Avoid
- Using backticks for nested commands - it becomes unreadable.
- Using backticks instead of $() for new scripts
- Forgetting quotes when spaces are involved
- Overcomplicating one-liners - break them into steps for clarity.
- Assuming stderr output works - only stdout is captured.
- Not handling empty results - always check if the command actually returned something
- Performance concerns - each substitution spawns a subshell, so don't overuse in loops
Mini Exercises to Practice
1. Print username, home directory, and shell:
echo "User: $(whoami), Home: $(pwd), Shell: $SHELL"
2. Create a dynamic daily backup filename:
filename="backup-$(date +%F).tar.gz" echo $filename
3. Show OS, kernel version, and architecture:
echo "OS: $(uname -s) | Kernel: $(uname -r) | Arch: $(uname -m)"
Frequently Asked Questions (FAQs)
Q: What is command substitution in Bash?
A: Command substitution lets you run a command inside another command and use its output dynamically, using the syntax $(command).
Q: What is the difference between $(…) and backticks?
A: $(...) is modern, supports nesting, and is easier to read. Backticks `command` are older and less flexible.
Q: How do I use command substitution to create dynamic filenames?
A: You can embed $(date) or other commands in a filename, for example: filename="backup-$(date +%F).tar.gz".
Q: Can I use multiple commands inside $(…)?
A: Yes, you can nest commands or combine them with pipes, like echo "Top process: $(ps aux | sort -nrk 3,3 | head -1)".
Q: Why should I quote command substitutions in Bash?
A: Quoting ensures that spaces or special characters in the output do not break your commands, e.g., name="$(whoami)".
Learn Bash Scripting Today!
Bash scripting is one of the most valuable skills for Linux system administration. It helps automate repetitive tasks, manage servers efficiently, and handle complex operations with just a few lines of code.
It's like having a Swiss Army knife for automating tasks, managing systems, and solving problems efficiently.
We have compiled 28 useful topics with examples to learn bash scripting. Check the following link for more details:
Conclusion
Bash command substitution is a small feature with big impact. It makes your scripts dynamic, clean, and more powerful.
By learning $(...), you can automate tasks, fetch system information, and even handle real-world problems like installing the latest software automatically.
Command substitution is incredibly useful for creating dynamic, responsive bash scripts. Start with simple examples and gradually work your way up to more complex use cases as you get comfortable with the concept.
更多推荐

所有评论(0)