Bash脚本单字输入正常,多字输入报JSON/cURL错误求助
问题解决方法
问题根源
多字内容里的空格、特殊字符会被Shell拆分,破坏JSON结构;同时未正确转义内容中的特殊字符,导致cURL解析JSON时出现语法错误。
具体修复步骤
用工具生成标准JSON
避免手动拼接JSON字符串,用jq或printf自动处理特殊字符转义:- 用
jq(推荐,需提前安装):RELEASE_NOTE=$(jq -n --arg note "$INPUT" '{content: $note}') - 用
printf(无需额外工具):RELEASE_NOTE=$(printf '{"content": "%q"}' "$INPUT")
- 用
正确引用变量并指定Content-Type
在cURL的--form参数中,用双引号包裹JSON变量,并明确标注字段的Content-Type为application/json,避免API解析错误:curl -X POST \ --form "releaseNote=$RELEASE_NOTE;type=application/json" \ --form "file=@/path/to/your/file" \ https://your-api-endpoint.com避免Shell变量拆分
所有包含空格或特殊字符的变量,传递给cURL时必须用双引号包裹,防止Shell将内容拆分为多个参数。
完整示例脚本
#!/bin/bash read -p "输入发布说明: " INPUT # 用jq生成标准JSON RELEASE_NOTE=$(jq -n --arg note "$INPUT" '{content: $note}') # 发起请求 curl -X POST \ --form "releaseNote=$RELEASE_NOTE;type=application/json" \ --form "file=@test.txt" \ https://your-api-endpoint.com
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

