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