Bash

Redis cli shell腳本未知操作數刪除帶有十六進制的鍵

  • November 5, 2020

創建了一個 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

您應該嘗試引用鍵

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

這應該足夠了。如果沒有引號,反斜杠可能會有不同的解釋。可能還需要將反斜杠加倍。你可以用sed它。

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

shell 很可能將“\x”轉換為“x”。

引用自:https://unix.stackexchange.com/questions/618076