BASH - 阅读 - 如何要求[enter]完成输入?示例 [y] + [输入]

问题描述 投票:0回答:1

我无法在网上或在

read
手册中找到此问题的答案。

我有一个简单的是/否提示,接受

y
n

我试图让它需要在输入

enter
y
后按下
n
(特别是)。

示例:

$ Do you want to continue?

_ y + enter

$ Continuing!

以下是我目前拥有的代码:

while true; do
    read -n 1 -r -p "Continue (y/n):" yn

        case $yn in 
            [yY] ) 
                echo "Yes - Continuing..."
                break;;
            [nN] )
                echo "No - Exiting..."
                exit;;
            * ) 
                echo "Invalid response!";;
    esac
done

我尝试过设置

-n 2
哪个“有点”有效,因为它需要按下 2 个键,但是,如果我输入
y
,然后改变主意并点击
backspace
,它仍然会继续并继续。同样的事情,如果我“胖手指”的事情......像
bn
ty
将继续,因为响应中有一个
n
y

如何要求按下 2 个键,其中一个是

y
Y
,以及
enter
键,而忽略任何其他组合?

[编辑]

设置

-n 2
并要求
[yY]'' )
似乎有效,但如果我尝试
y
+
backspace
,它仍然会退回到“无效输入”。

不知道如何忽略被算作“输入”的

backspace
键。

bash sh prompt
1个回答
0
投票

您所需要的是:

$ cat tst.sh
#!/usr/bin/env bash

while true; do
    IFS= read -r -p 'Continue (y/n): ' yn

    case $yn in
        [yY] )
            echo 'Yes - Continuing...'
            break;;
        [nN] )
            echo 'No - Exiting...'
            exit;;
        * )
            echo 'Invalid response!';;
    esac

done

因为当您点击

read
生成换行符时
Enter
将完成,那么
case
将检查该换行符之前的 1 个字符是
y
n
。按键盘上的退格键不会生成退格字符,它会从输入中删除前面的字符,因此如果您键入
n backspace y
,您的脚本将只读取
y
,就像您没有按
n backspace 一样
首先。

© www.soinside.com 2019 - 2024. All rights reserved.