The colon affects whether the variable is checked for being unset or null versus only checking for whether it's unset.
$ 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
From the Bash man page:
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.