What does the expression ${var:-default} do in bash scripting?
It checks if the variable var is set and not empty. If var is unset or empty, it uses the default value instead.
Click to reveal answer
intermediate
How does ${var:-default} differ from ${var-default} in bash?
${var:-default} uses the default if var is unset or empty, while ${var-default} uses the default only if var is unset (empty is allowed).
Click to reveal answer
beginner
Write a bash command using ${var:-default} to print the value of name or 'Guest' if name is empty or unset.
echo "Hello, ${name:-Guest}!"
Click to reveal answer
intermediate
What happens if var is set to an empty string and you use ${var:-default}?
The expression treats var as empty and returns default because :- checks for unset or empty.
Click to reveal answer
intermediate
Can ${var:-default} change the value of var?
No, it only returns the default value if var is unset or empty but does not assign it to var. To assign, use ${var:=default}.
Click to reveal answer
What will echo ${user:-anonymous} print if user is unset?
Aanonymous
Bempty line
Cuser
Derror
✗ Incorrect
Since user is unset, ${user:-anonymous} returns the default 'anonymous'.
If var="" (empty string), what does echo ${var:-default} output?
Adefault
Bempty line
Cvar
Derror
✗ Incorrect
:- treats empty as unset, so it outputs the default value.
Which expression assigns the default value to var if it is unset or empty?
A${var:=default}
B${var:-default}
C${var-default}
D${var=default}
✗ Incorrect
${var:=default} assigns the default to var if unset or empty.
What does ${var-default} do differently from ${var:-default}?
AUses default only if var is unset, not if empty
BUses default if var is empty only
CAlways uses default
DAssigns default to var
✗ Incorrect
${var-default} uses default only if var is unset, but allows empty values.
What will echo ${var:-"No value"} print if var="Hello"?
AHello
BNo value
Cempty line
Derror
✗ Incorrect
Since var is set and not empty, it prints its value 'Hello'.
Explain how the bash expression ${var:-default} works and when it is useful.
Think about how to avoid errors when variables might be empty.
You got /4 concepts.
Describe the difference between ${var:-default} and ${var:=default} in bash scripting.
One changes the variable, the other just returns a value.
You got /4 concepts.
Practice
(1/5)
1. What does the expression ${var:-default} do in a bash script?
easy
A. It uses the value of var if set; otherwise, it uses default without changing var.
B. It sets var to default if var is unset or empty.
C. It always replaces var with default.
D. It throws an error if var is unset or empty.
Solution
Step 1: Understand the syntax of ${var:-default}
This syntax means: use var if it is set and not empty; otherwise, use default.
Step 2: Check if var is changed
This expression does not assign or change var, it only provides a fallback value for use.
Final Answer:
It uses the value of var if set; otherwise, it uses default without changing var. -> Option A
Quick Check:
Default value used only if var is empty or unset [OK]
Hint: Remember: :- means use default if empty or unset [OK]
Common Mistakes:
Thinking it changes the variable's value
Confusing :- with := which assigns default
Assuming it throws an error if unset
2. Which of the following is the correct syntax to print a variable name or use "Guest" if name is empty or unset?
easy
A. echo ${name=Guest}
B. echo ${name?Guest}
C. echo ${name+Guest}
D. echo ${name:-Guest}
Solution
Step 1: Identify the correct default value syntax
The syntax ${var:-default} prints var if set; otherwise, prints default.
Step 2: Check each option
echo ${name=Guest} assigns default if unset, not just prints. echo ${name+Guest} prints Guest only if name is set. echo ${name?Guest} throws error if name is unset. Only echo ${name:-Guest} prints name or "Guest" safely.
Final Answer:
echo ${name:-Guest} -> Option D
Quick Check:
Use :- for default fallback [OK]
Hint: Use :- to print default without assignment [OK]
Common Mistakes:
Using = which assigns instead of fallback
Using + which prints default only if var is set
Using ? which causes error if var unset
3. What is the output of this script?
unset user
user=""
echo "User: ${user:-anonymous}"
medium
A. User: anonymous
B. User:
C. User: user
D. User: ${user:-anonymous}
Solution
Step 1: Analyze variable state
The variable user is first unset, then set to an empty string.
Step 2: Apply default value logic
Since user is empty (empty string counts as unset for :-), the expression uses the default "anonymous".
Final Answer:
User: anonymous -> Option A
Quick Check:
Empty variable triggers default value [OK]
Hint: Empty or unset triggers default with :- [OK]
Common Mistakes:
Thinking empty string is treated as set
Expecting empty output instead of default
Confusing unset and empty behavior
4. Identify the error in this script snippet:
echo "Name: ${name-default}"
What is the problem?
medium
A. The dash should be a plus sign: ${name+default}.
B. The syntax is correct and will work as expected.
C. It should be ${name:-default} to use default if name is empty or unset.
D. The variable name is missing a $ sign.
Solution
Step 1: Understand the difference between - and :-
Using ${name-default} uses default only if name is unset, but not if empty.
Step 2: Correct syntax for empty or unset
To cover both unset and empty, ${name:-default} is needed.
Final Answer:
It should be ${name:-default} to use default if name is empty or unset. -> Option C
Quick Check:
Use :- to cover empty and unset [OK]
Hint: Use :- not - to cover empty and unset [OK]
Common Mistakes:
Using - which ignores empty variables
Confusing + and - operators
Assuming syntax is always correct
5. You want to print the value of path if set and not empty, otherwise print "/usr/local/bin". But if path is set to an empty string, you want to treat it as unset. Which command correctly does this?
hard
A. echo ${path-/usr/local/bin}
B. echo ${path:-/usr/local/bin}
C. echo ${path:=/usr/local/bin}
D. echo ${path:+/usr/local/bin}
Solution
Step 1: Understand the requirement
We want to print path if it is set and not empty; otherwise, print the default "/usr/local/bin".
Step 2: Choose correct parameter expansion
${path:-default} uses default if path is unset or empty. ${path-default} only uses default if unset, not empty. ${path:=default} assigns default to path. ${path:+default} prints default only if path is set.
Final Answer:
echo ${path:-/usr/local/bin} -> Option B
Quick Check:
:- covers unset and empty [OK]
Hint: Use :- to treat empty as unset and provide default [OK]
Common Mistakes:
Using - which ignores empty strings
Using := which changes variable value
Using + which prints default only if set
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.