如何在curl请求中让Bash动态变量生效?转义字符失效求助
解决curl请求中Bash变量无法注入JSON的问题
你的问题核心是单引号包裹的字符串中Bash变量不会被解析:原代码里-d参数用单引号括住了整个JSON,导致$prompt被当作普通字符串传给API,而非替换成变量的实际值。
以下是两种可行的解决方案:
方法1:替换引号并转义JSON内部双引号
把外层单引号改成双引号,同时给JSON里的双引号加上反斜杠转义,既让Bash能解析变量,又保证JSON格式合法:
output=$(curl https://api.openai.com/v1/images/generations \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d "{ \"prompt\": \"$prompt\", \"n\": 1, \"size\": \"1024x1024\" }")
方法2:用jq构造合法JSON(推荐)
如果$prompt包含特殊字符(比如双引号、换行、反斜杠),手动转义容易出错,建议用jq工具自动处理JSON转义:
output=$(curl https://api.openai.com/v1/images/generations \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d "$(jq -n --arg p "$prompt" '{prompt: $p, n: 1, size: "1024x1024"}')")
jq的--arg参数会把Bash变量$prompt安全传入JSON,自动处理所有需要转义的字符,彻底避免格式错误。
内容的提问来源于stack exchange,提问作者Jay Mee
相关产品推荐
相关产品推荐

