Bird
Raised Fist0
Bash Scriptingscripting~10 mins

Brace expansion ({1..10}) in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Brace expansion ({1..10})
Start
↓
Detect brace expansion
↓
Parse range start and end
↓
Generate sequence from start to end
↓
Replace brace with sequence
↓
Output expanded list
↓
End
Brace expansion detects the {start..end} pattern, generates the sequence, and outputs the expanded list.
Execution Sample
Bash Scripting
echo {1..5}
This command expands the brace {1..5} into the sequence 1 2 3 4 5 and prints it.
Execution Table
StepActionInputOutput
1Detect brace expansionecho {1..5}{1..5} detected
2Parse range{1..5}start=1, end=5
3Generate sequencestart=1, end=51 2 3 4 5
4Replace brace with sequenceecho {1..5}echo 1 2 3 4 5
5Execute commandecho 1 2 3 4 51 2 3 4 5
💡 Sequence generated and printed, expansion complete
Variable Tracker
VariableStartAfter Step 2After Step 3Final
input_stringecho {1..5}echo {1..5}echo 1 2 3 4 5echo 1 2 3 4 5
startN/A111
endN/A555
sequenceN/AN/A1 2 3 4 51 2 3 4 5
Key Moments - 2 Insights
Why does the command output multiple numbers separated by spaces instead of the literal {1..5}?
Because brace expansion replaces the {1..5} with the sequence 1 2 3 4 5 before the command runs, as shown in step 4 of the execution table.
What happens if the start number is greater than the end number, like {5..1}?
Brace expansion generates a descending sequence from 5 down to 1, similar to step 3 but counting backwards.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output after step 3?
A1 2 3 4 5
B{1..5}
Cecho 1 2 3 4 5
Decho {1..5}
💡 Hint
Check the 'Output' column in row for step 3 in the execution table.
At which step is the brace replaced with the sequence?
AStep 2
BStep 4
CStep 3
DStep 5
💡 Hint
Look for the step where the input changes from 'echo {1..5}' to 'echo 1 2 3 4 5' in the execution table.
If the range was {3..7}, what would be the sequence generated at step 3?
A7 6 5 4 3
B1 2 3 4 5
C3 4 5 6 7
D3 7
💡 Hint
Refer to the variable_tracker for how the sequence is generated from start to end.
Concept Snapshot
Brace expansion syntax: {start..end}
Generates a sequence of numbers from start to end.
Replaces the brace with the full sequence before command runs.
Supports ascending and descending ranges.
Example: echo {1..5} outputs '1 2 3 4 5'.
Full Transcript
Brace expansion in bash scripting detects patterns like {1..10} and expands them into a sequence of numbers. The shell first detects the brace, then parses the start and end numbers. It generates the full sequence from start to end, replacing the brace with this sequence. Finally, the command runs with the expanded list. For example, 'echo {1..5}' becomes 'echo 1 2 3 4 5' and prints the numbers. This process allows quick generation of sequences without loops or manual typing.

Practice

(1/5)
1. What does the Bash brace expansion {1..5} produce when used in a command?
easy
A. A sequence of numbers: 1 2 3 4 5
B. A sequence of letters: a b c d e
C. A syntax error
D. A single string: {1..5}

Solution

  1. Step 1: Understand brace expansion syntax

    The syntax {start..end} generates a sequence of numbers or letters from start to end.
  2. Step 2: Apply to numbers 1 to 5

    Using {1..5} produces the numbers 1, 2, 3, 4, 5 separated by spaces.
  3. Final Answer:

    A sequence of numbers: 1 2 3 4 5 -> Option A
  4. Quick Check:

    Brace expansion {1..5} = 1 2 3 4 5 [OK]
Hint: Brace expansion {x..y} lists numbers or letters from x to y [OK]
Common Mistakes:
  • Thinking it outputs letters for numbers
  • Expecting a syntax error
  • Assuming it outputs the literal string
2. Which of the following is the correct syntax to generate numbers from 3 to 7 using brace expansion in Bash?
easy
A. echo [3..7]
B. echo {3-7}
C. echo (3..7)
D. echo {3..7}

Solution

  1. Step 1: Recall correct brace expansion syntax

    Brace expansion uses curly braces with two dots: {start..end}.
  2. Step 2: Check each option

    Only echo {3..7} uses correct braces and dots. Others use wrong symbols like parentheses, brackets, or hyphens.
  3. Final Answer:

    echo {3..7} -> Option D
  4. Quick Check:

    Correct syntax uses curly braces and two dots [OK]
Hint: Use curly braces and two dots for sequences {start..end} [OK]
Common Mistakes:
  • Using parentheses or brackets instead of braces
  • Using a hyphen instead of two dots
  • Missing braces entirely
3. What is the output of the following Bash command?
echo file{1..3}.txt
medium
A. file1.txt file2.txt file3.txt
B. file{1..3}.txt
C. file1 file2 file3.txt
D. file1.txt file2.txt file3

Solution

  1. Step 1: Understand brace expansion with suffix

    The brace expansion {1..3} generates 1 2 3, and the suffix .txt is added to each.
  2. Step 2: Combine parts

    Each expanded number is combined with 'file' prefix and '.txt' suffix, producing: file1.txt file2.txt file3.txt.
  3. Final Answer:

    file1.txt file2.txt file3.txt -> Option A
  4. Quick Check:

    Brace expansion with suffix repeats suffix for each number [OK]
Hint: Brace expansion repeats suffix/prefix for each number [OK]
Common Mistakes:
  • Expecting literal braces in output
  • Missing suffix on some items
  • Mixing suffix placement
4. Identify the error in this Bash command:
echo {1..5..2}
medium
A. Outputs 1 2 3 4 5
B. Syntax error: too many dots
C. No error; outputs 1 3 5
D. Outputs nothing

Solution

  1. Step 1: Understand brace expansion with step

    The syntax {start..end..step} is valid in Bash to generate sequences with a step.
  2. Step 2: Apply to {1..5..2}

    This generates numbers starting at 1, stepping by 2, up to 5: 1, 3, 5.
  3. Final Answer:

    No error; outputs 1 3 5 -> Option C
  4. Quick Check:

    Brace expansion supports step with two dots between numbers [OK]
Hint: Brace expansion can include step: {start..end..step} [OK]
Common Mistakes:
  • Thinking extra dots cause syntax error
  • Expecting continuous sequence ignoring step
  • Assuming no output for step usage
5. You want to create empty files named log1.txt through log10.txt using a single Bash command with brace expansion. Which command achieves this?
hard
A. touch log{1..10}
B. touch log{1..10}.txt
C. touch log{1..10}.txt.txt
D. touch log{1..10.txt}

Solution

  1. Step 1: Understand the goal

    You want files named log1.txt, log2.txt, ..., log10.txt created.
  2. Step 2: Use brace expansion with suffix

    The correct syntax is touch log{1..10}.txt, which expands to log1.txt, log2.txt, ..., log10.txt.
  3. Step 3: Check other options

    touch log{1..10} omits the .txt suffix; touch log{1..10.txt} has invalid syntax with .txt inside braces; touch log{1..10}.txt.txt adds an extra .txt to each filename.
  4. Final Answer:

    touch log{1..10}.txt -> Option B
  5. Quick Check:

    Brace expansion with suffix creates all files at once [OK]
Hint: Use touch with brace expansion and suffix: touch name{1..n}.ext [OK]
Common Mistakes:
  • Placing suffix inside braces incorrectly
  • Adding extra suffixes
  • Omitting suffix leading to wrong filenames
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