Shell concept (Bash, Zsh) in Linux CLI - Time & Space Complexity
When using a shell like Bash or Zsh, commands run one after another. We want to understand how the time taken grows when we run scripts or commands that repeat actions.
How does the time needed change when the number of commands or inputs grows?
Analyze the time complexity of the following shell script snippet.
for file in *.txt; do
grep "hello" "$file"
done
This script looks through all text files in a folder and searches for the word "hello" inside each file.
Look at what repeats in this script.
- Primary operation: The loop runs once for each text file found.
- How many times: Equal to the number of .txt files in the folder.
As the number of text files grows, the script runs the search more times.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 files | 10 searches |
| 100 files | 100 searches |
| 1000 files | 1000 searches |
Pattern observation: The time grows directly with the number of files. Double the files, double the work.
Time Complexity: O(n * m)
This means the time needed grows linearly with the number of files (n) and also depends on the size of each file (m) to check.
[X] Wrong: "The script runs in the same time no matter how many files there are."
[OK] Correct: Each file adds more work because the loop runs once per file, so more files mean more time.
Understanding how loops in shell scripts affect time helps you write efficient scripts and explain your thinking clearly in real situations.
What if we changed the script to search inside files and also inside subfolders recursively? How would the time complexity change?