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"

それだけで十分です。引用符がないと、バックスラッシュが異なるように解釈されることがあります。バックスラッシュを2倍にする必要があるかもしれません。あなたはそれを使用することができますsed

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

シェルは「\x」を「x」に変換できます。

関連情報