从stdin
进行读取时,会使用正常的ASCII,也许是utf-8,但是会出现转义序列。例如当有人按下键盘上的“向上箭头”时。
我如何对字母'A'做出反应,但仅当它不像'Esc [AD;''这样的转义序列的一部分时? 首先剥离所有转义序列! 我该怎么办?
也许有一个关于转义序列有多长的规则?也许某些terminfo输出/文件具有所有已知的转义序列?没找到其中一个?
许多无效的示例之一:
#/bin/sh
while :; do
#this part is an made up example, case i do more complex stuff with $key
if test x"$key" = xA; then echo 'The Key A was pressed.'; fi
#end of made up example
key="$(/bin/bash -c 'read -s -n1 -t10 key; echo "$key"')"
if [[ "$key" == "q" ]]; then exit; fi
if [[ "$key" == "1" ]]; then sort="fin"; fi
if [[ "$key" == "2" ]]; then sort="size"; fi
if [[ "$key" == "3" ]]; then sort="percent"; fi
done;
它就像一种魅力,但是:
如果我按下任何引起转义序列的键:
Arrow Up
是包含“ A”的某些序列,因此它会打印“按了A”键。我一直在使用脚本或程序,因此我可以基于前面的字节来实现规则,但是我不能仅使用一些“管道命令”。
如果您发现了这个问题,但是在写入文件时正在寻找相同的东西,或者您一次读取多个字符的任何其他用例,那么请看一下{ {3}}
如何从输入中删除转义序列,以便可以忽略转义序列内的普通字符?