Redis cli 쉘 스크립트 알 수 없는 피연산자 16진수 키 제거

Redis cli 쉘 스크립트 알 수 없는 피연산자 16진수 키 제거

다음을 사용하여 패턴과 일치하는 키를 삭제하는 쉘 스크립트를 만들었습니다.

host=${1:-}
port=${2:-6379}
database=${3:-0}
pattern=${4:-"Test"}

cursor=-1
keys=""

echo "Starting to delete"
while [ $cursor -ne 0 ]; do
  if [ $cursor -eq -1 ]
  then
    cursor=0
  fi

  reply=`redis-cli -h $host -p $port SCAN $cursor MATCH $pattern`
  cursor=`expr "$reply" : '\([0-9]*[0-9 ]\)'`
  keys=${reply##[0-9]*[0-9 ]}
  echo "$keys"
  redis-cli -h $host -p $port DEL $keys
done

이는 키에 16진수가 없는 키에 적합합니다. 그러나 16진수 문자가 포함된 키의 경우 알 수 없는 피연산자 오류 메시지가 나타납니다. 예시 키:

\xac\xed\x00\x05t\x00\x15test

이러한 문자를 이스케이프 처리하는 방법에 대한 조언이 필요합니다.

여기서도 같은 문제가 발생합니다. https://stackoverflow.com/questions/46854691/how-to-delete-redis-keys-with-special-characters

답변1

핵심을 인용해야 합니다

redis-cli -h $host -p $port DEL "$keys"

그 정도면 충분합니다. 따옴표가 없으면 백슬래시가 다르게 해석될 수 있습니다. 백슬래시를 두 배로 늘려야 할 수도 있습니다. 당신은 그것을 사용할 수 있습니다 sed.

redis-cli -h $host -p $port DEL `echo "$keys" | sed -e 's/\\/\\\\/'`

쉘은 "\x"를 "x"로 변환할 수 있습니다.

관련 정보