Color output (ANSI escape codes) in Bash Scripting - Time & Space Complexity
We want to understand how the time it takes to run a script changes when we add color output using ANSI escape codes.
Specifically, does adding color affect how long the script runs as the output grows?
Analyze the time complexity of the following code snippet.
#!/bin/bash
for i in {1..100}
do
echo -e "\033[31mLine $i\033[0m"
done
This script prints 100 lines, each line colored red using ANSI escape codes.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop that prints each line with color codes.
- How many times: 100 times, once per line.
As the number of lines to print increases, the script runs more print commands, each with color codes.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 print commands with color codes |
| 100 | 100 print commands with color codes |
| 1000 | 1000 print commands with color codes |
Pattern observation: The number of operations grows directly with the number of lines printed.
Time Complexity: O(n)
This means the time to run the script grows linearly with the number of lines printed, even with color codes.
[X] Wrong: "Adding color codes makes the script run much slower and changes the time complexity."
[OK] Correct: The color codes are just extra characters printed each time, so they add a small constant cost per line but do not change how the total time grows with more lines.
Understanding how adding features like color output affects script performance helps you write efficient scripts and explain your reasoning clearly in interviews.
"What if we added nested loops to print a colored grid of text? How would the time complexity change?"
Practice
\e[31m do in a bash script?Solution
Step 1: Understand ANSI escape code format
ANSI escape codes start with \e[ and end with m, where numbers define colors or styles.Step 2: Identify code 31
Code 31 sets the text color to red in terminal output.Final Answer:
Changes the text color to red -> Option CQuick Check:
\e[31m = red text color [OK]
- Confusing text color with background color
- Thinking \e[31m resets colors
- Assuming it makes text bold
Success in green color using echo in bash?Solution
Step 1: Use correct ANSI escape code format
The code to start green text is \e[32m and to reset colors is \e[0m.Step 2: Check each option's correctness
echo -e "\e[32mSuccess\e[0m" correctly wraps 'Success' with start and reset codes. Others have syntax errors or missing reset.Final Answer:
echo -e "\e[32mSuccess\e[0m" -> Option BQuick Check:
Start green with \e[32m and reset with \e[0m [OK]
- Forgetting to reset color after text
- Placing reset code before text
- Using incorrect escape code syntax
echo -e "\e[33mWarning\e[0m: Disk space low"
Solution
Step 1: Analyze the escape codes in the command
\e[33m sets yellow text color, \e[0m resets color back to default after 'Warning'.Step 2: Understand echo -e behavior
Echo with -e interprets escape sequences, so 'Warning' appears yellow, rest normal.Final Answer:
Warning in yellow color followed by ': Disk space low' in default color -> Option DQuick Check:
\e[33m colors 'Warning', \e[0m resets color [OK]
- Assuming entire line is colored
- Ignoring -e flag in echo
- Confusing color codes with styles
Error in red:echo "\e[31mError\e[0m"
Solution
Step 1: Check echo command usage
By default, echo does not interpret escape sequences without -e flag.Step 2: Confirm color codes and quotes
Color code 31 for red and reset \e[0m are correct; double quotes allow escape sequences with -e.Final Answer:
Missing -e flag in echo to enable escape sequences -> Option AQuick Check:
Use echo -e to interpret \e codes [OK]
- Forgetting -e flag in echo
- Changing correct color codes
- Using wrong quote types unnecessarily
Success in green and Error in red on separate lines, then resets color. Which script snippet correctly does this?Solution
Step 1: Check color codes and reset usage
Each line uses correct color code (32 for green, 31 for red) and resets color with \e[0m.Step 2: Verify echo usage and line separation
echo -e "\e[32mSuccess\e[0m"; echo -e "\e[31mError\e[0m" uses separate echo commands with -e flag and resets color after each line, ensuring correct colors and reset.Final Answer:
echo -e "\e[32mSuccess\e[0m"; echo -e "\e[31mError\e[0m" -> Option AQuick Check:
Separate echo with -e and reset color each line [OK]
- Not resetting color after each line
- Using single echo without proper newlines
- Omitting -e flag in echo
Ready to prove it?
Pass the test and this pattern moves unknown
