鱼 Shell |使用 curl 和 JSON 进行变量赋值的命令替换

Fish Shell | Command Substitution using curl and JSON for variable assignment

我找不到关于多次使用命令替换的 Fish Shell 的任何文档。

我正在尝试从 LocationIQ 的 curl API 查询传输的 JSON 结果集(jq 解析器)分配州、城市。 2 命令替换 1:(curl) 和 2:(jq)。如果我能得到地址变量赋值,我就不需要位置变量赋值

功能用途: #Take 2个参数(纬度,经度)和return 2个变量$State, $City

JSON:

{
  "address": {
    "city": "Aurora",
    "country": "United States of America",
    "country_code": "us",
    "county": "Kane County",
    "postcode": "60504",
    "road": "Ridge Road",
    "state": "Illinois"
  },
  "boundingbox": [
    "41.729347",
    "41.730247",
    "-88.264466",
    "-88.261979"
  ],
  "display_name": "Ridge Road, Aurora, Kane County, Illinois, 60504, USA",
  "importance": 0.2,
  "lat": "41.729476",
  "licence": "https://locationiq.com/attribution",
  "lon": "-88.263423",
  "place_id": "333878957973"
}

我的函数:

function getLocation            
   set key 'hidden'
   set exifLat $argv[1]
   set exifLon $argv[2]
   set location (curl -s "https://us1.locationiq.com/v1/reverse.phpkey=$key&lat=$exifLat&lon=$exifLon&format=json" | set address (jq --raw-output  '.address.state,.address.city') )
   
   echo "Location: $location
   echo "state:    $address[1]"
   echo "city:     $address[2]"
end

Error: fish Command substitution not allowed

仅使用 curl 命令替换 -> 删除:为 jq 设置地址和括号即可正常工作。

set location (curl -s "https://us1.locationiq.com/v1/reverse.phpkey=$key&lat=$exifLat&lon=$exifLon&format=json" | jq --raw-output  '.address.state,.address.city')

我还是新手 - 也许有更好的方法来实现我想要的结果:将 JSON 州分配给变量并将城市分配给变量?

我最初尝试(切片位置[17] - 城市,位置[19] - 州)并得到不一致的结果,因为字段似乎是动态的并且影响了影响排序的结果数量。

感谢任何帮助!

我发现嵌套的 set 令人困惑。您是否打算使用 $location 来保存下载的 JSON 数据,并使用 $address 来保存 jq 的结果?如果是,将它们分成单独的语句

set url "https://us1.locationiq.com/v1/reverse.phpkey=$key&lat=$exifLat&lon=$exifLon&format=json"
set location (curl -s $url)
set address (echo $location | jq --raw-output  '.address.state,.address.city')