Redis cli shell脚本未知操作数删除十六进制键

Redis cli shell脚本未知操作数删除十六进制键

创建了一个 shell 脚本,使用以下脚本删除与模式匹配的键:

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

这对于钥匙中没有十六进制的钥匙来说效果很好。但当涉及十六进制字符的键时,遇到未知操作数错误消息。示例密钥:

\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/\\/\\\\/'`

shell 可能会将“\x”转换为“x”。

相关内容