A expansão da variável ${parameter:-word}usará o valor de $parameterse estiver definido e não for nulo (não uma sequência vazia), caso contrário, a sequência será usada word.
A omissão do :teste não testará se o valor está vazio, apenas se está desconfigurado ou não.
Isso significa que ${PS1-}será expandido para o valor de $PS1se estiver definido, mas para uma sequência vazia se estiver vazia ou não definida. Neste caso, este é exatamente o mesmo como ${PS1:-}como a cadeia depois -também está vazio.
A diferença entre "${PS1-}"e "$PS1"é sutil, como observa @Rakesh Sharma: ambos serão expandidos para o valor de $PS1ou para uma string vazia, se não estiver definida. A exceção é quando set -uestá ativo; nesse caso, a expansão de variáveis não definidas causaria um erro . O valor padrão (vazio) definido por "${PS1-}"contorna isso, expandindo um conjunto PS1para a sequência vazia sem erro.
Essa é a sintaxe padrão ( originada no shell Bourne no final dos anos 70 ), assim como outras expansões semelhantes.