for loop with range ({1..10}) in Bash Scripting - Time & Space Complexity
We want to understand how the time it takes to run a bash for loop changes as we increase the number of items it goes through.
Specifically, how does the loop with a range like {1..10} behave when the range grows?
Analyze the time complexity of the following code snippet.
for i in {1..10}
do
echo "Number: $i"
done
This code runs a loop from 1 to 10 and prints each number.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The loop runs the echo command once for each number in the range.
- How many times: Exactly as many times as the numbers in the range (10 times here).
As the range grows, the number of times the loop runs grows the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 echo commands |
| 100 | 100 echo commands |
| 1000 | 1000 echo commands |
Pattern observation: The number of operations grows directly with the input size.
Time Complexity: O(n)
This means the time to run the loop grows in a straight line with the number of items in the range.
[X] Wrong: "The loop runs in constant time no matter how big the range is."
[OK] Correct: Each number in the range causes the loop to run once, so more numbers mean more work.
Understanding how loops grow with input size is a key skill. It helps you explain how your scripts will behave with bigger data, which is important in real work.
"What if we changed the loop to run from 1 to 10 but printed only every second number? How would the time complexity change?"
Practice
for i in {1..5}; do echo $i; doneSolution
Step 1: Understand the loop range syntax
The loop uses {1..5}, which expands to numbers 1, 2, 3, 4, 5.Step 2: Check the loop body output
Each iteration prints the current number, so numbers 1 to 5 print on separate lines.Final Answer:
Prints numbers 1 to 5, each on a new line -> Option BQuick Check:
Range {1..5} loops from 1 to 5 [OK]
- Thinking {1..5} is a string, not a range
- Confusing range start and end values
- Expecting zero-based counting
Solution
Step 1: Identify correct brace expansion syntax
Bash uses curly braces {start..end} for ranges, so {1..10} is correct.Step 2: Check other options for syntax errors
Parentheses, square brackets, and angle brackets are invalid for this purpose in Bash loops.Final Answer:
for i in {1..10}; do echo $i; done -> Option AQuick Check:
Brace expansion uses curly braces {..} [OK]
- Using parentheses or brackets instead of braces
- Missing the 'in' keyword
- Forgetting to close the loop with 'done'
for i in {3..6}; do echo $((i * 2)); doneSolution
Step 1: Identify loop values
The loop variable i takes values 3, 4, 5, 6 from {3..6}.Step 2: Calculate output for each iteration
Each iteration prints i * 2: 3*2=6, 4*2=8, 5*2=10, 6*2=12.Final Answer:
6 8 10 12 -> Option CQuick Check:
Multiply each i by 2 [OK]
- Confusing loop values with output
- Using single parentheses instead of $(( ))
- Expecting space-separated output on one line
for i in {1..5} do
echo $i
doneSolution
Step 1: Check for syntax correctness in loop header
The for loop header must end with a semicolon or newline before 'do'. Here, 'do' follows directly after {1..5} without either, causing a syntax error.Step 2: Verify other parts
Variable $i is defined by the loop, brace syntax is correct, and loop body can be on next lines.Final Answer:
Missing semicolon or newline after {1..5} -> Option DQuick Check:
Loop header must end properly before 'do' [OK]
- Omitting semicolon or newline before 'do'
- Misunderstanding brace expansion syntax
- Thinking loop body must be on same line
Solution
Step 1: Understand brace expansion with step
Brace expansion supports {start..end..step}, so {2..10..2} generates even numbers 2,4,6,8,10.Step 2: Check other options
B uses [ ] test which performs string comparison, not arithmetic modulo, so never prints evens; C multiplies numbers incorrectly to 4,6,8,10,12,14,16,18,20; D steps by 3, not 2.Final Answer:
for i in {2..10..2}; do echo $i; done -> Option AQuick Check:
Use {start..end..step} for stepped ranges [OK]
- Not using step in brace expansion
- Multiplying loop variable instead of stepping
- Using wrong step size
Ready to prove it?
Pass the test and this pattern moves unknown
