Việc mở rộng biến ${parameter:-word}sẽ sử dụng giá trị $parameternếu nó được đặt và không null (không phải là một chuỗi rỗng), nếu không nó sẽ sử dụng chuỗi word.
Bỏ qua :sẽ không kiểm tra xem giá trị có trống không, chỉ khi nó không được đặt hay không.
Điều này có nghĩa là ${PS1-}sẽ mở rộng thành giá trị $PS1nếu nó được đặt, nhưng thành một chuỗi trống nếu nó trống hoặc không được đặt. Trong trường hợp này, điều này hoàn toàn giống như ${PS1:-}chuỗi sau -cũng trống.
Sự khác biệt giữa "${PS1-}"và "$PS1"là tinh tế, như @Rakesh Sharma lưu ý: cả hai sẽ mở rộng thành giá trị của $PS1hoặc thành một chuỗi trống nếu nó không được đặt. Ngoại lệ là khi set -uhoạt động, trong trường hợp mở rộng các biến không đặt sẽ gây ra lỗi . Giá trị mặc định (trống) được đặt theo "${PS1-}"chu vi này, mở rộng một unset PS1thành chuỗi trống mà không có lỗi.
Đây là cú pháp tiêu chuẩn ( bắt nguồn từ shell Bourne vào cuối những năm 70 ), cũng như một vài bản mở rộng tương tự khác.