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