首页 > 解决方案 > 将json值提取到zsh shell脚本中的变量

问题描述

我正在尝试从远程 api 获取货币的价值,以便以后可以通过一些计算来运行它。但是,我不能将此值分配给变量。

#!/usr/bin/env zsh

result = $(curl -s -X GET "https://openexchangerates.org/api/latest.json?app_id=SOME_KEY" | jq '.rates.GBP')

echo $result

这导致:

> ./script.sh:5: command not found: result

标签: bashshelljq

解决方案


在类似 Bourne 的 shell(例如,sh、bash、zsh)中,等号周围不能有空格。当 zsh 看到这一行时会发生什么:

result = $(curl -s -X GET "https://openexchangerates.org/api/latest.json?app_id=SOME_KEY" | jq '.rates.GBP')

它认为这result是命令的名称,等号及其后面的内容是该命令的参数。为避免这种情况,只需执行以下操作:

result=$(curl -s -X GET "https://openexchangerates.org/api/latest.json?app_id=SOME_KEY" | jq '.rates.GBP')

ETA:我确实注意到错误的行号是 5,而不是我期望的 3。我不知道这是否是因为 CR/LF 行尾问题,如果您向我们展示的脚本中缺少某些内容,或者其他原因。


推荐阅读