Розширення змінної ${parameter:-word}використовуватиме значення, $parameterякщо воно встановлено та не-null (не порожній рядок), інакше він буде використовувати рядок word.
Якщо пропустити :заповіт, не буде перевірятися, чи значення порожнє, лише чи воно не встановлено чи ні.
Це означає, що ${PS1-}вона розшириться до значення, $PS1якщо воно встановлено, але до порожнього рядка, якщо він порожній або не встановлений. У цьому випадку це точно так само, ${PS1:-}як і рядок після -, також порожній.
Різниця між "${PS1-}"і "$PS1"є незначною, як зазначає @Rakesh Sharma: і те, і інше буде розширюватися до значення $PS1або до порожнього рядка, якщо воно не встановлено. Виняток - коли set -uактивовано, і в цьому випадку розширення невстановлених змінних може спричинити помилку . Значення (порожнє), встановлене за замовчуванням, "${PS1-}"обминає це, розширюючи невстановлене PS1значення до порожнього рядка без помилок.
Це стандартний синтаксис ( виник у оболонці Борна наприкінці 70-х років ), як і пара інших подібних розширень.