Tilde expansion (~) in Bash Scripting - Time & Space Complexity
We want to understand how the time it takes to process tilde expansion changes as the input grows.
Specifically, how does bash handle the shortcut for home directories when many paths use ~?
Analyze the time complexity of the following bash snippet using tilde expansion.
for path in ~/docs ~/downloads ~/pictures; do
echo "$path"
done
This code loops over a few paths starting with ~ and prints each expanded path.
Look for repeated actions that affect time.
- Primary operation: Expanding ~ to the full home directory path.
- How many times: Once per path in the loop (3 times here).
Each time the script sees a path starting with ~, it replaces it with the home directory.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 expansions |
| 100 | 100 expansions |
| 1000 | 1000 expansions |
Pattern observation: The number of expansions grows directly with the number of paths using ~.
Time Complexity: O(n)
This means the time to expand all ~ grows linearly with how many paths need expanding.
[X] Wrong: "Tilde expansion happens once and then applies to all paths instantly."
[OK] Correct: Each path with ~ is expanded separately, so more paths mean more expansions.
Understanding how simple expansions scale helps you reason about script performance and efficiency in real tasks.
What if we changed the script to use absolute paths instead of ~? How would the time complexity change?
Practice
~ represent in a bash shell?Solution
Step 1: Understand tilde usage in bash
The tilde~is a shortcut that expands to the current user's home directory path.Step 2: Compare options with definition
Only the current user's home directory correctly states that~means the current user's home directory.Final Answer:
The current user's home directory -> Option AQuick Check:
Tilde (~) = home directory [OK]
- Confusing ~ with root directory /
- Thinking ~ means current directory
- Assuming ~ is a temporary folder
alice using tilde expansion?Solution
Step 1: Understand tilde with username
Using~usernamerefers to that user's home directory without a slash after the username.Step 2: Check each option
~ /alicehas a space after ~, invalid.~/alicerefers toalicesubfolder in current user's home.~alicecorrectly refers to alice's home directory.~ alicehas space between ~ and alice, invalid syntax.Final Answer:
~alice -> Option DQuick Check:
~username = user's home directory [OK]
- Adding a slash immediately after username
- Putting space between ~ and username
- Using ~/username which means subfolder in current user's home
/home/bob?
echo ~
Solution
Step 1: Understand echo with tilde
The shell expands~to the current user's home directory before running echo.Step 2: Apply expansion
Since the home directory is/home/bob, the command becomesecho /home/bob, which prints/home/bob.Final Answer:
/home/bob -> Option AQuick Check:
echo ~ outputs home directory path [OK]
- Expecting echo to print ~ literally
- Confusing with root directory /root
- Thinking echo ~ causes error
ls ~But it shows an error:
ls: cannot access '~': No such file or directory. What is the most likely cause?Solution
Step 1: Understand tilde expansion and quoting
Tilde expansion happens only when ~ is unquoted. Quoting it (like '~') disables expansion.Step 2: Analyze error cause
The error shows ls tried to find a folder literally named '~', meaning expansion did not happen due to quotes.Final Answer:
You put single quotes around ~, preventing expansion -> Option BQuick Check:
Quotes block tilde expansion [OK]
- Assuming ~ always expands even in quotes
- Thinking home directory is missing
- Believing ls cannot use ~
notes.txt from the home directory of user carol to your current directory. Which command correctly uses tilde expansion to do this?Solution
Step 1: Understand tilde with username and path
~carolexpands to carol's home directory. Adding/notes.txtaccesses the file inside her home.Step 2: Check each option
cp ~carol/notes.txt . correctly uses~carol/notes.txt. cp ~/carol/notes.txt . uses~/carol/notes.txtwhich means a subfoldercarolinside your home, wrong user. cp ~ /carol/notes.txt . has a space breaking the path. cp ~carol notes.txt . misses the slash before filename, so it tries to copy a directory.Final Answer:
cp ~carol/notes.txt . -> Option CQuick Check:
~username/file = file in that user's home [OK]
- Using ~/username which is wrong path
- Adding spaces breaking tilde expansion
- Forgetting slash between username and file
Ready to prove it?
Pass the test and this pattern moves unknown
