Using Default Values in Bash Scripts with ${var:-default}
📖 Scenario: You are writing a simple bash script to greet users. Sometimes, the user might not provide their name. You want to make sure the script still works by using a default name when none is given.
🎯 Goal: Build a bash script that uses the ${var:-default} syntax to provide a default value for a variable if it is empty or unset.
📋 What You'll Learn
Create a variable called username with no value initially.
Create a variable called default_name with the value Guest.
Use the ${var:-default} syntax to assign a greeting name that uses username if set, or default_name if not.
Print the greeting message using the chosen name.
💡 Why This Matters
🌍 Real World
Scripts often need to handle missing inputs or environment variables. Using default values keeps scripts robust and user-friendly.
💼 Career
Knowing how to use default values in bash is essential for system administrators, DevOps engineers, and anyone automating tasks on Linux or Unix systems.
Progress0 / 4 steps
1
Set up the username variable with no value
Create a variable called username and set it to an empty string.
Bash Scripting
Hint
Use username="" to create an empty string variable.
2
Create a default_name variable with value Guest
Create a variable called default_name and set it to the string Guest.
Bash Scripting
Hint
Use default_name="Guest" to assign the default name.
3
Use ${var:-default} to choose the greeting name
Create a variable called greeting_name that uses ${username:-$default_name} to get username if set, or default_name if username is empty or unset.
Bash Scripting
Hint
Use greeting_name=${username:-$default_name} to assign the value.
4
Print the greeting message with the chosen name
Print the message Hello, <name>! where <name> is the value of greeting_name. Use echo and double quotes.
Bash Scripting
Hint
Use echo "Hello, $greeting_name!" to print the greeting.
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.