만약 내가한다면
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
).