$ 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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,$PS1,$PS2和$PS4有一个值和工作像预期。$PS3为空(或包含空格、制表符等),但select正在使用#?for $PS3,但设置变量后,它可以正常工作。
为什么会这样,为什么会这样设计?
Jef*_*ler 15
因为医生是这么说的:
https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html#Bash-Variables
PS3
此变量的值用作选择命令的提示。如果未设置此变量,则选择命令会提示“#? '
ilk*_*chu 11
它似乎是在 Bash 中硬编码的。在execute_cmd.c, function 中execute_select_command(),有这个:
ps3_prompt = get_string_value ("PS3");
if (ps3_prompt == 0)
ps3_prompt = "#? ";
Run Code Online (Sandbox Code Playgroud)
请注意,它仅在PS3未设置时发生。如果你将它设置为一个空字符串,它select会很高兴地提示你,好吧,什么都没有。