GGistDev

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