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

如何使用jq将Bash环境变量传入JSON的双引号字符串中

解决方案

错误原因

  • jq执行命令参数顺序错误:--arg 需完整传入「变量名+变量值」配对参数,所有参数定义需放在 -f 模板文件 之前,否则会被错误识别为模板文件路径
  • jq 字符串内插不支持直接写 $变量名,需用 \($变量名) 语法包裹变量,才能在双引号字符串内正确解析传入的变量值

操作步骤

  1. 调整message.jq模板内容,使用jq官方字符串内插语法:
{
   "Subject": {
       "Data": "Value \($value1)",
       "Charset": "UTF-8"
   },
   "Body": {
       "Text": {
           "Data": "Value \($value2)",
           "Charset": "UTF-8"
       },
       "Html": {
           "Data": "Data example",
           "Charset": "UTF-8"
       }
   }
}
  1. 调整执行命令,正确传入bash变量:
    假设你bash中需要传入的两个变量分别为$bash_val1、$bash_val2,执行命令如下:
jq -n --arg value1 "$bash_val1" --arg value2 "$bash_val2" -f message.jq

可选简化方案

如果不想单独维护jq模板文件,也可以直接把模板逻辑写在bash命令中:

jq -n --arg value1 "$bash_val1" --arg value2 "$bash_val2" '
{
  "Subject": {"Data": "Value \($value1)", "Charset": "UTF-8"},
  "Body": {
    "Text": {"Data": "Value \($value2)", "Charset": "UTF-8"},
    "Html": {"Data": "Data example", "Charset": "UTF-8"}
  }
}'

效果示例

如果bash变量赋值为:

bash_val1="测试主题后缀"
bash_val2="测试正文内容"

执行后输出结果为:

{
  "Subject": {
    "Data": "Value 测试主题后缀",
    "Charset": "UTF-8"
  },
  "Body": {
    "Text": {
      "Data": "Value 测试正文内容",
      "Charset": "UTF-8"
    },
    "Html": {
      "Data": "Data example",
      "Charset": "UTF-8"
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:09:01