La expansión variable ${parameter:-word}
usará el valor de $parameter
si 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 $PS1
si 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 -u
está 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 PS1
a 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.