Двоеточие влияет на то, проверяется ли переменная на наличие сброса или на ноль, а не только на проверку того, не сброшена ли она.
$ var="goodbye"; echo ${var-hello}
goodbye
$ var="goodbye"; echo ${var:-hello}
goodbye
$ var= ; echo ${var:-hello}
hello
$ var= ; echo ${var-hello} # var is null, only test for unset so no sub. made
$ unset var; echo ${var:-hello}
hello
$ unset var; echo ${var-hello}
hello
Со страницы руководства Bash:
When not performing substring expansion, using the forms documented
below, bash tests for a parameter that is unset or null. Omitting the
colon results in a test only for a parameter that is unset.
${parameter:-word}
Use Default Values. If parameter is unset or null, the expan‐
sion of word is substituted. Otherwise, the value of parameter
is substituted.