检查退格键

检查退格键

如果我做

read -n 1 c

并输入退格键。

如何测试$c包含退格键?

[ "$c" = $'\b' ] 

不起作用。

我想做的是有一个程序,我可以在其中读取一行,甚至在该行完成之前就可以立即使用它:

#!/usr/bin/env bash
ttySettings=`stty --save`
stty -echo
str=
while read -n1 c; do
  if [ -z "$c" ]; then
    break
  fi
  if [ "$c" = $'\b' ]; then
    str="${str%?}"
  else
    str="${str}$c"
  fi
  printf '\r'
  for((i=0;i<COLUMNS;i++)); do
    printf ' '
  done
  printf '\r%s' "$str"
done
echo "$str"
stty "$ttySettings"

我基本上想根据输入的行过滤列表(显示在输入的行下方),并且我希望该过滤是实时的。

答案1

只需使用$'\177'而不是\b

if [ "$c" = $'\177' ]; then
    echo 'Whoa, we got a backspace!'
fi

答案2

您对退格键的检查似乎有效。但是,用于清除该行的脚本不起作用(对我来说,使用 bash 4.2.37)。循环如下

printf '\r'

可以替换为tput:

tput el1

打印\r)。

相关内容