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

如何解决shell脚本传递带空格参数引发的JSON解析错误?

问题根因

你当前直接拼接shell变量到JSON字符串的写法存在两个核心问题:

  • 未用双引号包裹的$2在遇到包含空格的参数时,会被shell拆分为多个独立参数。比如你传入的第二个参数是Zhang San,原写法会被拆为{"name":"Zhang和San"}两个参数传给curl,直接导致JSON结构断裂
  • 直接拼接变量无法处理参数内自带的双引号、转义字符、换行等内容,会破坏JSON的合法格式,触发解析报错

解决方案

方案1:使用jq生成标准JSON(最稳妥,无格式问题)

jq是shell环境下专门处理JSON的工具,会自动对空格、引号、特殊字符做标准转义,完全避免JSON格式错误。
修改后的脚本示例:

# 若未安装jq,可先执行 apt install jq(Debian/Ubuntu)或 yum install jq(CentOS/RHEL)安装
name="$2"
# 用jq生成合法的JSON字符串
json_data=$(jq -n --arg nm "$name" '{"name": $nm}')
# 发送curl请求,注意用双引号包裹$json_data避免拆分
curl -X POST -H "Content-Type: application/json" -d "$json_data" 你的接口地址

方案2:手动调整拼接规则(轻量场景适用)

如果暂时不想安装额外工具,可调整变量的引号包裹规则,避免空格拆分,写法如下:

curl -X POST -H "Content-Type: application/json" -d '{"name":"'"$2"'"}' 你的接口地址

注意:手动拼接的方式无法处理参数内包含双引号的场景,仅适合确认参数只有空格、无其他特殊字符的场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:36:00