bash - 循环和嵌套变量来存储api响应

时间:2018-03-22 00:39:55

标签: bash

我正在学习使用Bash和API,目前我遇到了与嵌套变量相关的问题。

我希望做的基本动作如下:

name="peter"; country="uk";    
gender=$(http -b GET "https://api.genderize.io/?$name=peter&country_id=$uk" | jq -e '.gender');
echo $gender

输出

"male"

我想采取的完整行动如下:

while read name <&3 && read country <&4

    do gender=$(http -b GET "https://api.genderize.io/?name=$name&country_id=$country" | jq -e '.gender')

    echo "$name : $gender" >> namesorted.txt 

    sleep 0.1 

done 3<namelist.txt 4<countrylist.txt

但输出为空,这意味着请求未正确发送:

Peter : null
Edouard : null
Henri : null
Anabelle : null
Nonso : null
Tom : null

我的代码出了什么问题?有没有办法让我看到代码发送的查询用于调试目的?

编辑它最终成了格式错误,正如评论中所指出的那样。谢谢!

1 个答案:

答案 0 :(得分:0)

正如评论中指出的那样,它最终成了格式错误:

在初始脚本中使用双引号是正确的,因为它允许扩展变量:

gender=$(http -b GET "https://api.genderize.io/?$name=peter&country_id=$uk" | jq -e '.gender')  

但是在我的完整脚本中,我混淆了单引号,这使得变量不会被扩展。我在原始问题中修复了它,代码可以工作。

感谢@Gordon Davidsson发现问题。