Bird
Raised Fist0
Bash Scriptingscripting~5 mins

Backticks and $() for command substitution in Bash Scripting

Choose your learning style10 modes available
Introduction
Backticks and $() let you run a command inside another command and use its result. This helps automate tasks by using outputs directly.
You want to save the output of a command into a variable.
You need to use the result of one command as input for another.
You want to run a command inside a script and use its output immediately.
You want to combine commands to create more complex automation.
You want to avoid typing output manually and reduce errors.
Syntax
Bash Scripting
variable=`command`
# or
variable=$(command)
Both backticks `` and $() run the command inside and replace it with the output.
$() is preferred because it is easier to read and can be nested.
Examples
Stores the current date and time in the variable current_date using backticks.
Bash Scripting
current_date=`date`
Stores the current date and time in the variable current_date using $(). This is clearer and preferred.
Bash Scripting
current_date=$(date)
Counts the number of files in the current folder and saves it in files_count.
Bash Scripting
files_count=$(ls | wc -l)
Shows how $() can be nested to run commands inside commands.
Bash Scripting
nested_example=$(echo $(date))
Sample Program
This script shows how to use backticks and $() to get the current user name and count files. It prints the results so you can see both methods work.
Bash Scripting
#!/bin/bash

# Get current user name using backticks
user_name=`whoami`

# Get current user name using $()
user_name_dollar=$(whoami)

# Print both results

echo "User name with backticks: $user_name"
echo "User name with \$(): $user_name_dollar"

# Count files in current directory
file_count=$(ls | wc -l)
echo "Number of files here: $file_count"
OutputSuccess
Important Notes
Using $() is better because it is easier to read and you can put one command inside another.
Backticks can be confusing if you need to nest commands, so prefer $().
Command substitution runs the command and replaces it with the output, so make sure the command outputs what you expect.
Time complexity depends on the command run inside substitution, not the substitution itself.
Common mistake: forgetting to quote variables holding command output can cause word splitting or errors.
Summary
Backticks `` and $() run commands and use their output inside scripts.
$() is easier to read and supports nesting commands.
Use command substitution to automate tasks by using command outputs directly.

Practice

(1/5)
1. What does the command substitution syntax $(date) do in a bash script?
easy
A. Creates a new variable named date
B. Runs the date command and replaces $(date) with its output
C. Comments out the date command
D. Prints the literal string $(date) without running the command

Solution

  1. Step 1: Understand command substitution

    Command substitution runs the command inside $() and replaces it with the command's output.
  2. Step 2: Apply to $(date)

    The date command outputs the current date and time, so $(date) is replaced by that output.
  3. Final Answer:

    Runs the date command and replaces $(date) with its output -> Option B
  4. Quick Check:

    Command substitution = runs command and inserts output [OK]
Hint: Remember: $() runs command and inserts output [OK]
Common Mistakes:
  • Thinking it creates a variable
  • Confusing it with comments
  • Expecting literal string output
2. Which of the following is the preferred syntax for command substitution in bash?
easy
A. echo `ls -l`
B. echo $(ls -l
C. echo $[ls -l]
D. echo $(ls -l)

Solution

  1. Step 1: Identify valid command substitution syntax

    Command substitution uses either backticks `command` or $(command). Both the backtick version and the incomplete $() version look valid at first.
  2. Step 2: Check for best practice and syntax correctness

    echo `ls -l` uses backticks which are valid but less readable and harder to nest. echo $(ls -l) uses $() which is modern and preferred. echo $[ls -l] uses invalid syntax with $[]. echo $(ls -l misses closing parenthesis.
  3. Final Answer:

    echo $(ls -l) -> Option D
  4. Quick Check:

    Use $() for clear command substitution [OK]
Hint: Use $() for command substitution, it's clearer and nestable [OK]
Common Mistakes:
  • Using $[] which is arithmetic expansion, not command substitution
  • Missing closing parenthesis
  • Confusing backticks with other symbols
3. What will be the output of this script snippet?
files=$(ls /tmp)
echo "$files"
medium
A. Shows an error because of missing quotes
B. Prints the literal string '$(ls /tmp)'
C. Lists all files and directories inside /tmp one per line
D. Prints nothing because variable is empty

Solution

  1. Step 1: Understand command substitution with ls

    The command ls /tmp lists files in /tmp. Using files=$(ls /tmp) stores that output as a string with filenames separated by newlines.
  2. Step 2: Echo the variable with quotes

    Using echo "$files" prints the content of files preserving newlines, so it lists all files and directories one per line.
  3. Final Answer:

    Lists all files and directories inside /tmp one per line -> Option C
  4. Quick Check:

    Command substitution stores output string = list of files [OK]
Hint: Command substitution stores output as string, echo prints it [OK]
Common Mistakes:
  • Expecting literal command string output
  • Confusing quotes causing errors
  • Assuming variable is empty
4. Identify the error in this script snippet:
current_dir=`pwd
 echo "Current directory is: $current_dir"
medium
A. Missing closing backtick for command substitution
B. Incorrect use of double quotes
C. Variable name is invalid
D. No error, script runs fine

Solution

  1. Step 1: Check command substitution syntax

    The command substitution using backticks must start and end with backticks. Here, the closing backtick is missing after pwd.
  2. Step 2: Analyze impact of missing backtick

    Without the closing backtick, bash will throw a syntax error and not run the script properly.
  3. Final Answer:

    Missing closing backtick for command substitution -> Option A
  4. Quick Check:

    Backticks must be paired to run commands [OK]
Hint: Always close backticks to avoid syntax errors [OK]
Common Mistakes:
  • Forgetting to close backticks
  • Misplacing quotes inside command substitution
  • Assuming variable names cause errors
5. You want to store the number of files in your home directory in a variable file_count. Which command correctly uses command substitution to do this?
hard
A. file_count=$(ls ~ | wc -l)
B. file_count=`ls ~ wc -l`
C. file_count=$(ls ~ wc -l)
D. file_count=ls ~ | wc -l

Solution

  1. Step 1: Understand the command to count files

    To count files, we list them with ls ~ and pipe to wc -l to count lines (files).
  2. Step 2: Use correct command substitution syntax

    file_count=$(ls ~ | wc -l) correctly uses $(ls ~ | wc -l) to run the full command and store output in file_count. The other options miss the pipe or fail to use command substitution.
  3. Final Answer:

    file_count=$(ls ~ | wc -l) -> Option A
  4. Quick Check:

    Use $() with full command and pipe inside [OK]
Hint: Use $() with full command including pipes for substitution [OK]
Common Mistakes:
  • Missing pipe between commands
  • Using backticks without pipe
  • Assigning command without substitution
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard