백스페이스 키를 확인하세요

백스페이스 키를 확인하세요

만약 내가한다면

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).

관련 정보