Расширение переменной ${parameter:-word}будет использовать значение $parameterif, если оно установлено, и ненулевое (не пустая строка), в противном случае оно будет использовать строку word.
Пропуск :не проверяет, является ли значение пустым, только независимо от того, установлено оно или нет.
Это означает, что ${PS1-}будет расширяться до значения, $PS1если оно установлено, но до пустой строки, если она пуста или не установлена. В этом случае, это точно так же , как ${PS1:-}как строка после -также опорожнить.
Как замечает @Rakesh Sharma, разница между "${PS1-}"и "$PS1"незначительна: оба расширятся до значения $PS1или до пустой строки, если она не задана. Исключением является то, когда set -uактивен, и в этом случае расширение неустановленных переменных может вызвать ошибку . (Пустое) значение по умолчанию, установленное с помощью "${PS1-}"обхода этого, расширяет unset PS1до пустой строки без ошибок.
Это стандартный синтаксис ( возник в оболочке Bourne в конце 70-х годов ), как и пара других подобных расширений.