我无法在网上或在
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
键。
您所需要的是:
$ 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
一样
首先。