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