问题描述
我找不到有关多次使用Command Substitution的Fish Shell文档。
我正在尝试从LocationIQ的curl API查询中传递的JSON结果集(jq解析器)中分配州,城市。 2命令替换1:(curl)和2:(jq)。如果我可以获取地址变量分配,则不需要位置变量分配
功能用途: #接受2个参数(纬度,经度)并返回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
错误:fish命令不允许替换
仅使用curl命令替换就可以正常工作->删除jq的set address和parens。
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状态分配给变量,将City分配给变量?
我最初尝试(将位置[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')