$ echo $PS1
$
$ echo $PS2
>
$ echo $PS3
$ echo $PS4
+
$ select i in 1 2 3
> do
> case $i in
> 1)
> echo 1
> ;;
> *)
> ;;
> esac
> done
1) 1
2) 2
3) 3
#? 1
1
$ PS3="##? "
$ select i in 1 2 3; do case $i in 1) echo 1; ;; *) ;; esac; done
1) 1
2) 2
3) 3
##? 1
1
Như bạn có thể thấy, $PS1, $PS2và $PS4có một giá trị và làm việc như dự định. $PS3trống (hoặc chứa một khoảng trắng, tab, v.v.), nhưng selectđang sử dụng #?cho $PS3, nhưng khi biến được đặt, nó hoạt động bình thường.
Tại sao điều này hành xử theo cách này và tại sao nó được thiết kế theo cách này?
If this variable is not setmột phần. Người dùng có thể thử đặt nó thành ký tự trống hoặc dấu cách hoặc thậm chí là null