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

Bash脚本中如何将jq获取的带空格JSON值赋值变量并转义空格?

解决Bash中jq提取带空格JSON字段的变量赋值与空格转义问题

问题根源

你之前的命令失效的核心原因是:

  • $(jq ...)的命令替换会将jq输出的换行符转换为空格,加上echo的处理,原本两行的输出变成了一串用空格分隔的单词。
  • Bash的read默认按IFS(空格、制表符、换行)分割输入,导致TITLE只拿到第一个单词,DESCRIPTION拿到第二个,剩余内容被丢弃。

解决方案一:先正确赋值,再批量转义空格

先通过修改IFS让read仅按换行分割输入,确保完整读取每个字段,再统一转义空格:

# 修改IFS为仅换行,确保read按行读取两个字段
IFS=$'\n' read -r TITLE DESCRIPTION < <(jq -r '.meta | .title, .description' ./project.json)

# 对变量中的空格进行转义
TITLE=${TITLE// /\\ }
DESCRIPTION=${DESCRIPTION// /\\ }

解决方案二:让jq直接输出转义后的内容(一步到位)

在jq命令中直接处理空格转义,输出时就带反斜杠,read直接读取转义后的结果:

read -r TITLE DESCRIPTION < <(jq -r '
    .meta | 
    .title | gsub(" "; "\\\\ "), 
    .description | gsub(" "; "\\\\ ")
' ./project.json)

这里gsub(" "; "\\\\ ")是jq的字符串替换:把空格替换为\ (因为jq中反斜杠需要双重转义,所以用四个反斜杠表示最终输出一个反斜杠)。

验证效果

执行完上述命令后,可通过以下方式验证:

# 查看转义后的TITLE
echo "$TITLE"
# 输出:This\ is\ a\ title

# 查看转义后的DESCRIPTION
echo "$DESCRIPTION"
# 输出:Just\ a\ description

内容的提问来源于stack exchange,提问作者user3142695

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:41:03