$ 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
Seperti yang Anda lihat, $PS1
, $PS2
dan $PS4
memiliki nilai dan bekerja seperti yang dimaksudkan. $PS3
kosong (atau berisi spasi, tab, dll.), tetapi select
sedang digunakan #?
untuk $PS3
, tetapi ketika variabel diatur, ia bekerja secara normal.
Mengapa ini berperilaku seperti ini dan mengapa itu dirancang seperti ini?
If this variable is not set
bagian. Pengguna dapat mencoba mengaturnya ke karakter atau spasi kosong, atau bahkan mungkin nolTampaknya hard-coded di Bash. Dalam
execute_cmd.c
, fungsiexecute_select_command()
, ini dia:Perhatikan bahwa itu hanya terjadi jika
PS3
tidak disetel. Jika Anda mengaturnya ke string kosong,select
dengan senang hati akan meminta Anda, ya, tidak ada.sumber
Di
bash
,PS3
diatur ke"#? "
saat tidak diatur , yang merupakan default.Juga, POSIX juga
select
tidakPS3
didefinisikan, sehingga perilaku dapat bervariasi:ksh
,mksh
,yash
,zsh
Dan schilysh
mengatur default"#? "
.dash
, heirloomsh
, busyboxsh
tidak diaturPS3
sumber
Orang lain telah menjawab mengapa, tapi begini caranya - atur PS3 Anda ke nol:
sumber
PS3=
mencapai hal yang sama"\0"
, mengaturnya""
.