bash:如何在命令中添加数组元素?

时间:2019-02-13 07:15:55

标签: arrays bash curl

我在需要读取的文件中获取了值并将其添加到命令中。这是我失败的解决方案...

for arrayValue in "${fileArray[@]}"
do
    curl -s --user "${arrayValue[0]}:${arrayValue[1]}" "https://dyndns.loopia.se?hostname=$arrayValue
done

文件如下:

username
password
domain
domain
...

从文件读取没问题,问题在于如何将它们添加到curl命令中。

2 个答案:

答案 0 :(得分:4)

如果您的数组在前两个元素中包含用户名和密码,并且您希望避免循环访问它们,请尝试

for arrayValue in "${fileArray[@]:2}"
do
    curl -s --user "${fileArray[0]}:${fileArray[1]}" "https://dyndns.loopia.se?hostname=$arrayValue"
done

请注意arrayValue是如何引用fileArray中的当前元素的。它不是数组,因此您对${arrayValue[0]}${arrayValue[1]}的引用无效。

还要注意我们如何循环使用后缀:2从第三个数组元素开始。 (数组索引从零开始,因此索引2指向第三个元素。)

答案 1 :(得分:0)

假设主机名中没有空白字符(空格,CR ...),则还可以使用for摆脱printf循环:

printf -v url "https://dyndns.loopia.se?hostname=${fileArray[@]:2}"

请注意:2将获得除前两个元素之外的所有数组元素。

由于curl接受多个URL,因此可以轻松使用:

curl -s --user "${fileArray[0]}:${fileArray[1]}" $url