A expansão da variável ${parameter:-word}
usará o valor de $parameter
se 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 $PS1
se 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 $PS1
ou para uma string vazia, se não estiver definida. A exceção é quando set -u
está 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 PS1
para 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.