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

Bash脚本curl命令JSON变量无法识别问题求助

解决Bash脚本中curl JSON数据里变量无法解析的问题

问题核心

Bash中单引号包裹的内容会被当作纯字面量,不会解析其中的变量(比如$message),这就是你原命令里变量无法识别的根本原因。

三种可行解决方案

方案1:外层双引号+内部双引号转义

将包裹JSON的单引号换成双引号,同时对JSON内部的双引号用反斜杠\转义,既让Bash解析变量,又能保留JSON格式:

message="test"
curl -XPOST -d "{\"msgtype\":\"m.text\", \"body\":\"$message\"}" "$curlurl"

注意:$curlurl也建议用双引号包裹,避免变量包含空格或特殊字符时出现错误。

方案2:使用Here-doc传递数据

用Here-doc方式传递JSON,可读性更强,无需大量转义:

message="test"
curl -XPOST -d @- "$curlurl" <<EOF
{"msgtype":"m.text", "body":"$message"}
EOF

这里@-表示curl从标准输入读取数据,EOF未被单引号包裹时,Bash会自动解析其中的$message变量,JSON的双引号直接保留即可。

方案3:用jq构造合法JSON(推荐复杂场景)

如果$message可能包含特殊字符(比如双引号、换行),手动处理引号容易出错,推荐用jq工具生成标准JSON:

message="test"
curl -XPOST -d "$(jq -n --arg msg "$message" '{msgtype:"m.text", body:$msg}')" "$curlurl"

jq会自动处理变量中的特殊字符,确保生成的JSON格式完全合法,避免手动拼接的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:30:51