Bash 如何在交互式 shell 中检测 Enter 键?
数据阿明
结论
在 Bash 中,read -r -s -n 1 key 通常会在按下 Enter 时结束读取,不会把换行符存入 key,所以此时变量为空。检查 key 是否为空即可,无需与 \n 比较。
题目中的代码在 if [[ "$key" == 后混入了提问文字,后面的 \n' ]] 也不完整。照原样执行会报语法错误。删掉这些内容后,直接比较 \n 仍无法可靠地判断是否按下 Enter。
可运行示例
while true; do
IFS= read -r -s -n 1 key
if [[ -z $key ]]; then
echo "Breaking loop..."
break
fi
done
按下 Enter 时,read -n 1 会在换行处结束读取,key 为空,因此 [[ -z $key ]] 成立并退出循环。按其他键时,读到的字符会存入 key,循环继续。
注意事项
-s 会让 read 不回显输入,适用于终端交互。如果输入来自管道或文件,或者读取时遇到 EOF,read 的行为会与终端按键时不同。这些情况下还应检查 read 的退出状态。
备注:内容仅供参考。
