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

如何使用jq将Bash数组转换为指定结构的对象数组

问题原因

echo "${IDS[@]}"会将数组所有元素拼接为单个空格分隔的字符串传入jq,导致jq读取到的输入是一整行包含两个ID的内容,最终只会生成一个对象。

解决方法

方案1:逐行输出数组元素处理

通过printf将每个ID单独输出为一行,配合jq的inputs语法逐行处理后合并为数组:

IDS=("baf3eca8-c4bd-4590-bf1f-9b1515d521ba" "ef2fa922-2038-445c-9d32-8c1f23511fe4")
printf "%s\n" "${IDS[@]}" | jq -nR '[inputs | {id: ., names: ["bob", "sally"]}]'

方案2:直接传递数组参数(更简洁)

通过--args将Bash数组直接作为jq的位置参数传入,无需处理输入流换行:

IDS=("baf3eca8-c4bd-4590-bf1f-9b1515d521ba" "ef2fa922-2038-445c-9d32-8c1f23511fe4")
jq -n '$ARGS.positional | map({id: ., names: ["bob", "sally"]})' --args "${IDS[@]}"

两种方案都可以得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:06:09