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

如何将JSON键值对传入BASH命令并转为空格分隔的单行格式

实现BASH中JSON键值对转空格分隔单行的方案

你可以通过修改jq语句或者额外加shell管道两种方式实现需求:

方案1:直接修改jq逻辑输出单行(推荐)

不需要额外拼接管道,仅靠jq本身的能力就能输出目标格式,代码如下:

a='{"first": "a", "second": "b"}'
echo "$a" | jq -r 'to_entries | map(.key + "=" + .value) | join(" ")'

运行后直接输出:first=a second=b

逻辑说明:

  • to_entries 将JSON对象转换为由{key:xxx, value:xxx}元素组成的数组
  • map() 遍历数组,把每个元素拼接为key=value格式的字符串
  • join(" ") 将数组中所有字符串用空格拼接为单个字符串输出

方案2:用shell工具替换换行符(兼容低版本jq)

如果你的jq版本较低不支持上述语法,可以加tr命令将换行符替换为空格:

a='{"first": "a", "second": "b"}'
echo "$a" | jq -r 'to_entries | .[] | .key + "=" + .value' | tr '\n' ' '

如果需要末尾自动补换行,可以改成如下写法:

echo $(echo "$a" | jq -r 'to_entries | .[] | .key + "=" + .value' | tr '\n' ' ')

特殊场景注意

如果你的JSON值包含空格、引号等特殊字符,后续要将结果作为参数传入其他命令时,建议用bash数组接收更稳妥,避免解析错误:

# 将键值对逐行存入bash数组
mapfile -t kv_args < <(echo "$a" | jq -r 'to_entries | .[] | .key + "=" + .value')
# 调用命令时直接传入数组即可
your_target_command "${kv_args[@]}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 12:06:03