Bird
Raised Fist0
Bash Scriptingscripting~5 mins

Subshells (command grouping) in Bash Scripting - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a subshell in bash scripting?
A subshell is a separate child shell started by the main shell to run commands in isolation. It allows grouping commands so they run in a new shell environment without affecting the parent shell.
Click to reveal answer
beginner
How do you create a subshell to group commands in bash?
You create a subshell by enclosing commands in parentheses: ( command1; command2 ). This runs the commands inside a new shell process.
Click to reveal answer
intermediate
What happens to variable changes inside a subshell?
Changes to variables inside a subshell do not affect the parent shell. The subshell has its own copy of variables, so changes are lost when the subshell ends.
Click to reveal answer
intermediate
Why use subshells instead of just grouping commands with curly braces {}?
Subshells run commands in a separate environment, isolating changes like variable assignments or directory changes. Curly braces group commands but run in the current shell, so changes persist.
Click to reveal answer
beginner
Example: What is the output of this script? x=5 ( x=10; echo $x ) echo $x
Output: 10 5 Explanation: Inside the subshell, x is set to 10 and printed. Outside, x remains 5 because the subshell's change does not affect the parent shell.
Click to reveal answer
Which symbol is used to create a subshell in bash?
A{ }
B[ ]
C( )
D< >
If you change a variable inside a subshell, what happens to the variable outside?
AIt changes permanently
BIt causes an error
CIt becomes undefined
DIt remains unchanged
What is the main difference between using ( ) and { } for grouping commands?
A( ) runs commands in a subshell; { } runs in the current shell
B( ) runs commands faster than { }
C{ } creates a subshell; ( ) runs in current shell
DNo difference, both are the same
Which of these is a valid subshell command grouping?
A<cd /tmp; ls>
B(cd /tmp; ls)
C[cd /tmp; ls]
D{cd /tmp; ls}
Why might you use a subshell when running commands?
ATo isolate changes so they don't affect the main shell
BTo speed up command execution
CTo permanently change environment variables
DTo avoid typing commands
Explain what a subshell is and how it affects variable changes in bash scripting.
Think about running commands inside parentheses.
You got /3 concepts.
    Describe the difference between grouping commands with ( ) and { } in bash.
    Consider where changes like directory or variable assignments apply.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using a subshell in bash scripting with (commands)?
      easy
      A. To create a new user session
      B. To run commands faster by parallel processing
      C. To permanently change the current shell environment
      D. To run grouped commands in a separate shell, isolating their effects

      Solution

      1. Step 1: Understand what a subshell does

        A subshell runs commands inside parentheses in a new shell process separate from the current one.
      2. Step 2: Identify the effect of running commands in a subshell

        Changes like directory or variable updates inside a subshell do not affect the parent shell environment.
      3. Final Answer:

        To run grouped commands in a separate shell, isolating their effects -> Option D
      4. Quick Check:

        Subshell = isolated command group [OK]
      Hint: Subshells isolate changes inside parentheses [OK]
      Common Mistakes:
      • Thinking subshells speed up commands
      • Believing subshell changes affect parent shell
      • Confusing subshells with background jobs
      2. Which of the following is the correct syntax to run multiple commands in a subshell in bash?
      easy
      A. ( cd /tmp; ls )
      B. [ cd /tmp; ls ]
      C. { cd /tmp; ls; }
      D. < cd /tmp; ls >"

      Solution

      1. Step 1: Recall subshell syntax

        Subshell commands are grouped inside parentheses: ( commands ).
      2. Step 2: Check each option

        ( cd /tmp; ls ) uses parentheses correctly. { cd /tmp; ls; } uses braces which run commands in the current shell. Options B and D use invalid syntax.
      3. Final Answer:

        ( cd /tmp; ls ) -> Option A
      4. Quick Check:

        Subshell syntax = parentheses ( ) [OK]
      Hint: Use parentheses ( ) for subshell command grouping [OK]
      Common Mistakes:
      • Using braces { } instead of parentheses
      • Using square brackets [ ] which are test commands
      • Using angle brackets < > which redirect input
      3. What will be the output of the following script?
      var=hello
      (echo $var; var=world; echo $var)
      echo $var
      medium
      A. hello world hello
      B. hello hello hello
      C. world world hello
      D. hello world world

      Solution

      1. Step 1: Understand variable scope in subshell

        The subshell inherits the variable var=hello. Inside the subshell, var is changed to world, but this change is local to the subshell.
      2. Step 2: Trace the output commands

        Inside subshell: echo $var prints 'hello' then 'world'. Outside subshell: echo $var prints original 'hello' because subshell changes do not affect parent shell.
      3. Final Answer:

        hello world hello -> Option A
      4. Quick Check:

        Subshell changes don't affect parent variables [OK]
      Hint: Subshell variable changes stay local [OK]
      Common Mistakes:
      • Assuming variable change inside subshell affects parent
      • Confusing output order
      • Ignoring subshell isolation
      4. Identify the error in this script snippet:
      (cd /tmp; ls; cd /home)
      echo $PWD

      Why does echo $PWD not show /home?
      medium
      A. Because cd command is invalid inside subshell
      B. Because echo cannot access variables set in subshell
      C. Because the directory changes inside the subshell do not affect the parent shell
      D. Because ls command resets the directory

      Solution

      1. Step 1: Understand directory changes in subshell

        Commands inside parentheses run in a subshell, so directory changes like cd /tmp or cd /home only affect the subshell.
      2. Step 2: Check effect on parent shell

        The parent shell's current directory remains unchanged, so echo $PWD shows the original directory, not /home.
      3. Final Answer:

        Because the directory changes inside the subshell do not affect the parent shell -> Option C
      4. Quick Check:

        Subshell directory changes don't affect parent [OK]
      Hint: Directory changes in subshell stay local [OK]
      Common Mistakes:
      • Thinking cd inside subshell changes parent directory
      • Believing ls affects directory
      • Confusing variable scope with directory
      5. You want to temporarily change directory and list files without affecting the current shell's directory. Which command grouping achieves this correctly?
      hard
      A. { cd /var/log && ls; }
      B. (cd /var/log && ls)
      C. cd /var/log; ls
      D. cd /var/log && ls

      Solution

      1. Step 1: Identify command grouping that isolates directory change

        Using parentheses runs commands in a subshell, so directory changes inside do not affect the parent shell.
      2. Step 2: Analyze each option

        (cd /var/log && ls) uses parentheses correctly. { cd /var/log && ls; } uses braces which run commands in current shell, changing directory permanently. Options C and D change directory in current shell without grouping.
      3. Final Answer:

        (cd /var/log && ls) -> Option B
      4. Quick Check:

        Parent directory unchanged with subshell ( ) [OK]
      Hint: Use ( ) to isolate directory changes [OK]
      Common Mistakes:
      • Using braces { } which affect current shell
      • Not grouping commands, so directory changes persist
      • Assuming && alone isolates commands
      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