Quoting and Expansion
Master quoting rules and expansions to avoid surprises.
Single vs double quotes
echo 'path: $HOME' # literal $HOME
echo "path: $HOME" # expands HOME
Single quotes are literal; double quotes expand parameters/command substitutions.
Command substitution
date_str=$(date +%F)
echo "today: $date_str"
Prefer $(...) over backticks.
Brace expansion (generation)
echo file_{a,b,c}.txt # file_a.txt file_b.txt file_c.txt
mkdir -p logs/{app,db}/{info,error}
Runs before globbing; generates words, not paths.
Globbing (wildcards)
echo src/*.js
shopt -s nullglob # empty when no matches instead of literal pattern
Tilde and variable expansion order
Tilde ~ expands to home; parameter expansion happens after brace and before glob.
Arithmetic expansion
echo $(( 1 + 2 * 3 )) # 7
Word splitting and quoting
Always quote expansions that may contain spaces/newlines: "$var" and "$(cmd)".
Summary
- Use single quotes for literals; double for expansions
- Prefer
$(...), learn brace/glob ordering, and quote to prevent splitting