使用 if 或 case 语句一次读取一个字符的 BASH 内置读取时,如何捕获返回字符?

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

我偶然发现了一些本应简单的事情,结果却成了一个脑筋急转弯。作为一名尚未完全成熟的 BASH 程序员,我天真地认为我可以从交互式终端窗口读取字符并实际确定按下了哪些键!大多数按键都可以正常工作,但如何捕捉“返回”却并不明显。

这里有一些示例代码来说明问题:

   while [ justRead != "\n" ] ;
   do
      # read -e -s -N 1 justRead
      read -s -N 1 justRead
      case "$justRead" in
         \n | "\n" | \r | "\r" | ^M | '^M')
            echo  "return"
         ;;
         *)
            echo -n "$justRead"
         ;;
      esac
   done

可以看到,代码中有一行使用了 Readline 库,另一行则没有。两者的行为不同,但我都没有成功工作。我确信我的匹配字符串做错了。

我还注意到 -s -silent - 选项似乎被 Readline 忽略,但其他库却没有忽略,这对问题来说并不重要,我只是对此感到惊讶。

显然我在这里遗漏了一些东西!这必须很简单,对吧?

bash readline bash-builtins
1个回答
0
投票
   while [ justRead != "\n" ] ;
   do
      # read -e -s -N 1 justRead
      read -s -N 1 justRead
      case "$justRead" in
         $'\n')
            echo  "return"
         ;;
         *)
            echo -n "$justRead"
         ;;
      esac
   done
© www.soinside.com 2019 - 2024. All rights reserved.