Using Brace Expansion to Generate Number Sequences in Bash
📖 Scenario: Imagine you are organizing a small event and need to create folders numbered from 1 to 10 to store participant files. Doing this manually would take time, so you want to automate it using a simple Bash script.
🎯 Goal: Build a Bash script that uses brace expansion {1..10} to generate a sequence of numbers and create folders named folder1 to folder10.
📋 What You'll Learn
Create a variable with the sequence of numbers from 1 to 10 using brace expansion.
Create a prefix variable for folder names.
Use a loop to combine the prefix and numbers to create folder names.
Print the folder names to verify the output.
💡 Why This Matters
🌍 Real World
Automating repetitive tasks like creating multiple folders or files saves time and reduces errors.
💼 Career
Knowing how to use brace expansion and loops in Bash is useful for system administrators, DevOps engineers, and anyone working with Linux shell scripting.
Progress0 / 4 steps
1
Create a variable with numbers 1 to 10 using brace expansion
Create a variable called numbers and assign it the sequence generated by brace expansion {1..10}.
Bash Scripting
Hint
Use numbers=({1..10}) to create a sequence from 1 to 10.
2
Create a prefix variable for folder names
Add a variable called prefix and set it to the string folder.
Bash Scripting
Hint
Set prefix=folder to use as the folder name start.
3
Use a loop to combine prefix and numbers to create folder names
Write a for loop using num as the iterator to go through ${numbers[@]}. Inside the loop, create a variable folder_name by combining $prefix and $num.
Bash Scripting
Hint
Use for num in ${numbers[@]} and combine with prefix inside the loop.
4
Print the folder names to verify the output
Inside the loop, add a echo statement to print the folder_name variable.
Bash Scripting
Hint
Use echo "$folder_name" inside the loop to print each folder name.
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
Step 1: Understand brace expansion syntax
The syntax {start..end} generates a sequence of numbers or letters from start to end.
Step 2: Apply to numbers 1 to 5
Using {1..5} produces the numbers 1, 2, 3, 4, 5 separated by spaces.
Final Answer:
A sequence of numbers: 1 2 3 4 5 -> Option A
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
Step 1: Recall correct brace expansion syntax
Brace expansion uses curly braces with two dots: {start..end}.
Step 2: Check each option
Only echo {3..7} uses correct braces and dots. Others use wrong symbols like parentheses, brackets, or hyphens.
Final Answer:
echo {3..7} -> Option D
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
Step 1: Understand brace expansion with suffix
The brace expansion {1..3} generates 1 2 3, and the suffix .txt is added to each.
Step 2: Combine parts
Each expanded number is combined with 'file' prefix and '.txt' suffix, producing: file1.txt file2.txt file3.txt.
Final Answer:
file1.txt file2.txt file3.txt -> Option A
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
Step 1: Understand brace expansion with step
The syntax {start..end..step} is valid in Bash to generate sequences with a step.
Step 2: Apply to {1..5..2}
This generates numbers starting at 1, stepping by 2, up to 5: 1, 3, 5.
Final Answer:
No error; outputs 1 3 5 -> Option C
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
Step 1: Understand the goal
You want files named log1.txt, log2.txt, ..., log10.txt created.
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.
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.
Final Answer:
touch log{1..10}.txt -> Option B
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 unknownstrongwhile earning +1 Grip toward your certificate.