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.