PAYATHON 2026

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 的退出状态。

备注:内容仅供参考。