鱼 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')
我找不到关于多次使用命令替换的 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')