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

如何通过jq将Bash数组完整转换为JSON数组?

解决Bash数组转JSON数组仅保留首元素的问题

原脚本的问题在于:

  • Bash中直接使用$ARR只会展开为数组的第一个元素,正确的数组展开方式是"${ARR[@]}"
  • jq的--arg选项仅支持传递单个字符串,无法直接处理多个数组元素集合

以下提供两种可行的修改方案:

方案一:利用jq的位置参数接收数组元素

修改后的脚本:

#!/bin/bash
ARR=("a" "b")

collection_init_msg=$(jq -n '{arr: $ARGS.positional}' --args "${ARR[@]}")

echo some command "$collection_init_msg"

说明

  • "${ARR[@]}"将数组的每个元素作为独立参数传递给jq
  • --args告诉jq把后续所有位置参数存入$ARGS.positional数组,最终生成包含全部元素的JSON数组

方案二:通过管道传递null分隔的数组元素

如果数组元素可能包含空格或特殊字符,推荐此方法:

#!/bin/bash
ARR=("a" "b")

collection_init_msg=$(printf '%s\0' "${ARR[@]}" | jq -n '{arr: [inputs]}' -R -s)

echo some command "$collection_init_msg"

说明

  • printf '%s\0' "${ARR[@]}"用null字符分隔每个数组元素,避免元素含特殊字符时出现解析错误
  • -R让jq将输入视为原始字符串,-s读取所有输入内容,inputs遍历每个输入元素组成JSON数组

运行任意方案后,都会得到期望的输出:

some command {"arr":["a","b"]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:05:32