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

使用jq添加含空格的Bash字符串时失败的问题咨询

在jq中正确传递带空格的Bash变量

当Bash变量值包含空格时,直接在jq表达式中插入变量会触发语法错误,无空格时则可正常执行。

报错代码

value="value with spaces"
echo {} | jq ". +={"key":"'$value'"}"

错误信息

jq: error: syntax error, unexpected $end, expecting QQSTRING_TEXT or QQSTRING_INTERP_START or QQSTRING_END (Unix shell quoting issues?) at <top-level>, line 1: . +={"key":"value             jq: 1 compile error

期望输出

{"key":"value with spaces"}

问题原因

原代码的引号处理逻辑错误:当$value展开为带空格的字符串后,Shell会将空格作为参数分隔符,导致jq实际接收到的表达式被截断为. +={"key":"value,剩余部分被当作额外参数,从而触发语法错误。

解决方案

方法1:使用jq的--arg选项(推荐)

这是jq官方推荐的安全传递外部变量的方式,能自动处理空格、特殊字符等场景:

value="value with spaces"
echo {} | jq --arg val "$value" '. += {"key": $val}'

--arg会将Bash变量$value的值传入jq,作为jq内部的变量$val使用,完全避开Shell引号的问题。

方法2:修正Shell引号拼接(不推荐,仅作参考)

如果必须通过字符串拼接传递变量,需要严格处理引号嵌套:

value="value with spaces"
echo {} | jq '. += {"key": "'"$value"'"}'

这里的引号逻辑是:用单引号包裹jq表达式主体,在需要插入变量的位置,先关闭单引号、打开双引号('"),插入变量后再关闭双引号、重新打开单引号("')。但这种方式在变量包含引号、反斜杠等特殊字符时仍会出错,因此优先选择--arg方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:35:21