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

在Bash脚本中用jq从环境变量名数组生成键值对JSON

解决方法

高效单jq调用方案

直接用jq的内置env对象和reduce函数,一次性生成目标JSON,无需多次调用jq或管道:

arr=('env_var1' 'env_var2' 'env_var3')
jq -n 'reduce $ARGS.positional[] as $key ({}; .[$key] = env[$key])' --args "${arr[@]}"

方案说明

  • jq -n:从头构建新的JSON,不读取标准输入
  • $ARGS.positional[]:接收--args传入的数组元素(即环境变量名)
  • reduce:遍历每个变量名,初始值为空对象{},每次将env[$key](对应环境变量的实际值)赋值给JSON对象的$key键
  • env[$key]:jq内置的环境变量对象,直接通过键名获取对应值

修正原管道方案(适合需要保留管道场景)

如果一定要用类似原方案的管道方式,可通过bash间接引用获取环境变量值,再传给jq:

arr=('env_var1' 'env_var2' 'env_var3')
printf '%s\n' "${arr[@]}" |
  xargs -L1 -I{} jq -n --arg key {} --arg val "${!{}}" '{ ($key): $val }' |
  jq -s add

这里${!{}}是bash的间接引用语法,用于获取变量名为{}的环境变量的值。

原方案问题分析

原代码中jq -sR --arg key {} '{ ($key): . }'的.代表读取的标准输入内容(即变量名本身),而非该变量对应的环境变量值,所以生成的JSON值都是变量名而非实际值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:25:14