A sintaxe ${VAR:-default}
avalia o valor de VAR
ou, se não for definida ou nula, será avaliada como o texto após o hífen (nesse caso, default
); a sintaxe ${VAR- default}
é semelhante encurtada da função similar somente para quando a variável não está definida. $2
é um parâmetro posicional, portanto, sua instrução está testando o valor do segundo argumento e, se não estiver configurado, usando um valor vazio como padrão.
Por que usar um padrão vazio, pois isso teria o mesmo efeito que um $2
simples? Como em set -u
(equivalente a set -o nounset
), a substituição de uma variável não definida causa um erro: se houver menos de dois parâmetros, $2
erros serão eliminados. Mas ${2:-}
não irá errar, porque explicitamente substitui a string vazia se o parâmetro não estiver definido ou nulo.