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

使用jq向JSON插入新键时如何正确传入变量值?

问题原因

你用单引号包裹了整个jq脚本,shell不会解析单引号内部的变量引用,所以$SHORT_NAME被当作字面字符串直接写入了JSON,没有替换成实际的变量值。

解决方法

推荐两种可靠的处理方式:

方法1:使用jq的--arg参数(优先选择)

这是jq官方推荐的传递外部变量的方式,能避免字符串转义、特殊字符处理等问题,更安全稳定:

# 用$(...)代替反引号,可读性更好
SHORT_NAME=$(jq -r '.properties.cluster_name' filepath)
# 用--arg定义jq内部变量,再在脚本中引用
jq --arg short_val "$SHORT_NAME" '.properties.short_name = $short_val' filepath

--arg short_val "$SHORT_NAME"会把shell变量SHORT_NAME的值赋值给jq内部的$short_val变量,之后在jq脚本里直接引用这个变量即可。

方法2:调整shell引号拼接

如果不想用--arg,可以拆分引号,让shell解析变量部分:

SHORT_NAME=$(jq -r '.properties.cluster_name' filepath)
jq '.properties += { "short_name": "'"$SHORT_NAME"'" }' filepath

这里把jq脚本拆成三段拼接:

  • 单引号包裹的.properties += { "short_name": "'
  • 双引号包裹的$SHORT_NAME(让shell解析变量)
  • 单引号包裹的'" }'
    拼接后shell会先替换$SHORT_NAME为实际值,再传给jq处理。
正确结果示例

执行后JSON会变成:

{
  "properties": {
    "cluster_name": "abc-test-00",
    "short_name": "abc-test-00"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:25:23