ref -- https://www.tldp.org/LDP/abs/html/parameter-substitution.html ${parameter} same as $parameter; In certain contexts, only the less ambiguous ${parameter} form works. $a=100 $ echo ${a}; echo $a 100 100 id=${USER}-on-${HOSTNAME} echo $id ${parameter-default}, ${parameter:-default} # If parameter not set, use default. var1=1 var2=2 # var3 is unset. echo ${var1-$var2} # 1 echo ${var3-$var2} # 2 $ default_weight=65 $ john=70 $ w=${john-$default_weight} # 70 $ w=${jack-$default_weight} # 65 ${parameter-default} and ${parameter:-default} are almost equivalent. variable= # variable has been declared, but is set to null. echo "${variable-0}" # (no output) echo "${variable:-1}" # 1 unset variable echo "${variable-2}" # 2 echo "${variable:-3}" # 3