Le deux-points affecte si la variable est vérifiée pour être non définie ou nulle par rapport à la vérification uniquement si elle est désactivée.
$ 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
De la page man 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.
Ce n'est pas Perl, shell ressemble. – Schwern
Cela expliquerait pourquoi les docs Perl n'ont pas aidé! : P – geofflee