如果我做
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