需求:给 JSON 模版中的指定元素赋值

  1. 直接通过 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 传入。

  1. 通过 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 占位符。

0
0