Select、if-else 语句中的 Case 需要双重输入

Select、if-else 语句中的 Case 需要双重输入

我需要找出问题出在哪里。我需要编写一个脚本来提示用户在 if/else 语句中做出是/否选择。一般来说,我有一个像这样运行的 bash 脚本

if CONDITION; then
    COMMANDS1
else
    COMMANDS2
    echo "Does this look okay to you? (WARNING: This action will not be recoverable!) :          
    PS3="Select a number: "
    select yn in "Yes" "No"
    do
          case $yn in
               "Yes" )
                echo "Ok!" ; break ;;
                "No" )
                echo "Aborted!" ; break ;;
          esac
    done
fi

但是当我运行脚本时,它显示

Does this look okay to you? (WARNING: This action will not be recoverable!)
1) Yes
2) No
Select a number: (I have to press anything here)
Select a number: (Only this input does something).

我使用 sh -vx 运行脚本,它显示它分别运行 select 和 case。如何确保我只需要一项输入?

+ echo 'Does this look okay to you? (WARNING: This action will not be recoverable!) : '
Does this look okay to you? (WARNING: This action will not be recoverable!) : 
+ PS3='Select a number: '
+ select yn in '"Yes"' '"No"'
1) Yes
2) No
Select a number: 1
+ case "$yn" in
Select a number: 2
+ case "$yn" in
+ echo 'Aborted!'
Aborted!
+ break

非常感谢!

编辑:我在 Mac OS 14.1 上运行 bash。

答案1

对我有用。我怀疑之前的一些输入中还残留有文本stdin,您要向其中添加一些输入,以及(至关重要的)换行符。

您可以添加*默认情况,并打印 中存储的内容REPLY。我可能想以可见的形式显示这一点,以确定待处理的内容:

( * ) printf '%s' "${REPLY}" | od -A n -t x1ac;;

我也会引用"$yn",因为我不确定case这里多个单词会做什么。

相关内容