如何同时访问Bash for loop中的curl请求的两个数组索引?

时间:2018-12-10 11:27:28

标签: linux bash shell curl

在Bash中,我正在尝试查询国家/地区货币  从http://free.currencyconverterapi.com/api/v5/convert?q=USD_GBP开始,并自动更新我的OpenEdge API,而无需对符号进行硬编码。这意味着我必须将我的API中的货币符号卷曲并保存在数组中,并卷曲并保存货币转换器API中的值。之后,我想同时运行两个for循环或同时访问两个数组的索引,以运行需要

的API调用
url/rest/USD/12

种类的输入。

在bash中,我正在调用返回的卷发

ZAR USD EUR BWP CHF GBP  
在我的API中

一行。然后,我将结果保存在一个名为Currency的变量中

jsonEnd="_ZAR.val"
symbolEnd="_ZAR"

然后我运行

values=()
for j in ${currency[*]};
do
        ${values[j]}=$(curl -X GET -H "Content-type: application/json" http://free.currencyconverterapi.com/api/v5/convert?q=${currency[j]}$symbolEnd&compact=y | jq '.${currency[j]}$jsonEnd')         
done

要将货币值放入json结果中“ _ZAR.val”为a的数组中,请尝试使用jq指向“ val”

{
"USD_ZAR": {
    "val": 14.23065
} }

最后,我试图运行一个POST Curl,它需要上面发现的相对货币符号(例如USD)并带有值来更新。 以此形式

curl -X PUT -H "Content-Type: application/json" -H "Authorization: $context" http://192.168.xxx.xxx:8080/rest/exchangerates/USD/12

我尝试过

for i in ${values[@]}
do    
      curl -X PUT -H "Content-Type: application/json" -H "Authorization: $context" http://192.168.xxx.xxx:8080/rest/exchangerates/${currency[i]}/${values[i]}
done

我做错了,错误包括

curl: (6) Could not resolve host: USD_ZAR

等 我是bash的新手

1 个答案:

答案 0 :(得分:1)

${currency[*]}${currency[*]}都将扩展为数组内的 values 。所以当你写...

for j in "${currency[@]}"; do
    echo "${currency[j]}"         
done

...您没有访问${currency[0]}之类的东西,但没有访问${currency[USD]}之类的东西。

此外,要分配变量,您不能编写${array[i]}=value,而必须使用array[$i]=value

您可能还希望切换到关联数组(也称为 dictionary map ),在这里可以将字符串用作索引。这是一个粗略的骨架:

currencies=(ZAR USD EUR BWP CHF GBP)
declare -A values
for c in "${currencies[@]}"; do
    values["$c"]="$(curl ..."$c"... | jq ..."$c"... )"
done

c=EUR
echo "The value of $c is ${values[$c]}"