La expansión variable ${parameter:-word}usará el valor de $parametersi está establecido y no es nulo (no es una cadena vacía), de lo contrario usará la cadena word.
Omitir :no probará si el valor está vacío, solo si está desarmado o no.
Esto significa que ${PS1-}se expandirá al valor de $PS1si está configurado, pero a una cadena vacía si está vacío o sin configurar. En este caso, esto es exactamente lo mismo que ${PS1:-}como la cadena después -también está vacía.
La diferencia entre "${PS1-}"y "$PS1"es sutil, como señala @Rakesh Sharma: ambos se expandirán al valor de $PS1, o a una cadena vacía si no está establecida. La excepción es cuando set -uestá activo, en cuyo caso expandir las variables no definidas causaría un error . El valor predeterminado (vacío) establecido por "${PS1-}"evita esto, expandiendo un desarmado PS1a la cadena vacía sin error.
Esta es la sintaxis estándar ( originada en el shell Bourne a finales de los 70 ), al igual que otras expansiones similares.