【问题标题】:Recognizing Ctrl+KEY in case in bash在 bash 中识别 Ctrl+KEY
【发布时间】:2015-05-27 15:03:09
【问题描述】:

我一直在寻找答案,但找不到,所以现在我必须问。

我正在编写一个脚本,通过循环遍历每个键字母来创建一个文本字符串作为 T9 数字键盘(没有字典)。 除了处理退格(小键盘上的真正退格)之外,所有这些都可以正常工作。我使用“Read -n 1”作为输入,据我所知,退格映射到“^?”据我所知,“^”对应于在键入“?”时按下 ctrl。我无法获得处理此输入的案例,而且我不知道该怎么做。如果我用退格键替换任何单个键,即“-”,则该代码有效。所以我只需要知道我如何能够识别 read -n 和 case 中的退格

【问题讨论】:

  • 在此阅读中查看退格键的输出,看看你得到了什么结果:read -n 1 bs; printf %q\\n "$bs"。 (或者,printf %s "$bs" | xxd。)
  • 请注意,您的stty 设置将影响退格 (^H) 和删除 (^?) 映射。您可能需要进行原始输入,这可能会改变终端连接的状态。

标签: bash if-statement input case ctrl


【解决方案1】:

您可以使用$'...' 表示法来匹配bash 中的控制字符。 ^? 是表示 ASCII 127 (DEL) 的 C 样式符号。有几种选择:

* $'\177' - octal
* $'\x7f' - hexadecimal

其中任何一个都可以用作文字模式以匹配case 语句。

read -n 1 char
case $char in
    $'\177') echo "Backspace" ;;
esac

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 2015-04-29
    • 2011-09-30
    • 2016-01-08
    • 1970-01-01
    • 2010-10-05
    相关资源
    最近更新 更多