Raspbian Shell中如何将curl响应内容保存到变量?需获取USD汇率
解决Shell脚本中curl输出存变量及提取美元汇率的问题
你之前两种方法的问题
- 第一种
var = curl http://api.nbp.pl/api/exchangerates/rates/a/usd:Shell变量赋值不能有空格,而且要捕获命令输出必须用$(命令)或反引号包裹命令,否则会把var当成命令执行,自然报错。 - 第二种
curl ... >> var:这是把curl的输出追加到名为var的文件里,不是把值赋给变量var,完全搞错了用法。
正确的实现步骤
1. 把curl响应存到变量里
用$(command)捕获curl的输出,加-s参数让curl静默运行(不显示进度条),避免多余信息干扰:
# 捕获API响应到变量 response=$(curl -s http://api.nbp.pl/api/exchangerates/rates/a/usd/)
2. 提取标签里的汇率
可以用sed命令匹配标签内容,提取中间的数值:
# 从响应中提取汇率 usd_rate=$(echo "$response" | sed -n 's/.*<MID>\(.*\)<\/MID>.*/\1/p')
完整脚本示例
#!/bin/bash # 获取API响应 response=$(curl -s http://api.nbp.pl/api/exchangerates/rates/a/usd/) # 提取汇率 usd_rate=$(echo "$response" | sed -n 's/.*<MID>\(.*\)<\/MID>.*/\1/p') # 输出结果 echo "当前美元汇率(PLN):$usd_rate"
补充说明
如果API返回的是XML格式,也可以用专门的XML处理工具(比如xmllint)来提取,比正则更可靠:
usd_rate=$(echo "$response" | xmllint --xpath '//MID/text()' -)
不过需要先确保系统安装了xmllint(一般在libxml2-utils包中)。
内容的提问来源于stack exchange,提问作者rick rickardo
相关产品推荐
相关产品推荐

