Todas essas formas de expansão de parâmetros são alternativas:
-
${var:-val}
é substituído porval
sevar
não estiver definido ou nulo,${var}
caso contrário (entãoval
é um "valor padrão"); -
${var:=val}
primeiro atribuival
avar
sevar
não estiver definido ou nulo e, em seguida, (em todos os casos) é substituído por${var}
; -
${var:+val}
é substituído por nada sevar
não estiver definido ou nulo,val
caso contrário.
Omitir o :
elimina a parte "ou nula" de todas essas definições.
Tudo isso está descrito na bash(1)
manpage .
Alguns exemplos podem ajudar:
unset a
echo "${a:-default}"
produz default
, assim como echo "${a-default}"
.
a=
echo "${a:-default}"
novamente produz default
, mas echo "${a-default}"
produz uma linha em branco.
a=test
echo "${a:-default}"
produz test
, assim como echo "${a-default}"
.
unset a
echo "${a:=default}"
produz default
e a
é agora default
(conforme confirmado por echo "${a}"
).
A forma +
pode parecer estranha, mas é útil ao construir variáveis em várias etapas:
PATH="${PATH}${PATH:+:}/blah/bin"
adicionará :
antes de /blah/bin
apenas se PATH
não estiver vazio, o que evita ter um caminho começando com :
.