Bash
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
您應該嘗試引用鍵
redis-cli -h $host -p $port DEL "$keys"
這應該足夠了。如果沒有引號,反斜杠可能會有不同的解釋。可能還需要將反斜杠加倍。你可以用
sed
它。redis-cli -h $host -p $port DEL `echo "$keys" | sed -e 's/\\/\\\\/'`
shell 很可能將“\x”轉換為“x”。