You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash读取Redis含空格Key值失败,求解决方案

解决Bash中Redis读取带空格Key的问题

问题原因

直接使用$key而不加双引号时,Bash会把空格当作参数分隔符,将带空格的Key拆分成多个参数传给redis-cli,导致命令参数数量错误,触发ERR wrong number of arguments报错。另外你文件里带引号的Key,直接读取后引号会被当成Key的一部分,也会导致找不到对应Key。

解决方案

方案1:处理带引号的Key并正确传递参数

如果你的keys文件里带空格的Key是用双引号包裹的,先去掉引号再执行命令:

while IFS= read -r line; do
  # 移除首尾的双引号
  key=$(echo "$line" | sed 's/^"//;s/"$//')
  redis-cli -h 127.0.0.1 get "$key"
done < keys
  • IFS= read -r line:保证读取的行完整保留开头、结尾的空格,且不转义反斜杠,避免破坏Key内容。
  • sed命令用来去掉Key首尾的双引号——文件里的引号只是标识带空格的Key,不是Key本身的一部分。
  • get "$key":用双引号包裹变量,让Bash把整个Key当作单个参数传递。

方案2:无引号Key的直接处理

如果keys文件里的带空格Key没有引号(直接写a blank key),只需确保正确引用变量:

while IFS= read -r key; do
  redis-cli -h 127.0.0.1 get "$key"
done < keys

这里IFS= read -r key是核心,它能完整读取包含空格的行,再通过双引号包裹$key,保证参数传递不拆分。

方案3:用xargs批量处理(可选)

想简化命令的话,也可以用xargs,注意指定换行符作为分隔符:

xargs -d '\n' -I {} redis-cli -h 127.0.0.1 get "{}" < keys
  • -d '\n':让xargs以换行符分割输入,避免空格拆分参数。
  • -I {}:把读取的每一行替换为{},再用双引号包裹确保完整传递。

内容的提问来源于stack exchange,提问作者mark.gao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 18:45:49