需求:给 JSON 模版中的指定元素赋值
- 直接通过 jq 命令操作
data='{
"token": "abcd",
"title": "断网提示",
"content": "当前 IP:",
"template": "json"
}'
data=$(IP=$(curl -s http://ipconfig.io) ; jq --arg IP "$IP" '.content += $IP' <<< $data)
curl -H "Content-Type: application/json" -X POST -d "${data}" https://www.pushplus.plus/send解释:curl -s http://ipconfig.io 获取公网 IP 地址,传递给 jq 命令,jq 命令将传入的参数设为 IP,并命名为 $IP,通过 jq 操作 .content key,拼接 $IP 变量,jq 所操作的数据使用 <<< 从 $data 传入。
- 通过 echo replace 实现
由于这个功能实际运行在路由器上,但是路由器缺少相应的 jq 所需的库,所以直接通过 jq 操作不可行。所以改用 echo 实现。
data='{
"token": "abcd",
"title": "断网提示",
"content": "当前 IP:@IP",
"template": "json"
}'
data=$(echo ${data/@IP/$(curl -s http://ipconfig.io)})
curl -H "Content-Type: application/json" -X POST -d "${data}" https://www.pushplus.plus/send该方案在 content 里放置了一个 @IP 的占位符,使用 echo 的替换语法,替换 $data 变量里的 @IP 字符,使用嵌套 Shell 语句获取公网 IP,作为替换值替换 @IP 占位符。
