bash: Как добавить элементы массива в команду? - PullRequest
0 голосов
/ 13 февраля 2019

Я получил значения в файле, который нужно прочитать, и добавил в команду.Это мое неудачное решение ...

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

Файл выглядит так:

username
password
domain
domain
...

Чтение из файла не проблема, проблема в том, как добавить их в локонкоманда.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Если в имени хоста нет пустого символа (пробел, CR ...), вы также можете избавиться от цикла for, используя printf:

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

Обратите внимание на :2, который получает все элементы массива, кроме 2 первых.

Поскольку curl принимает несколько URL, вы можете просто использовать:

curl -s --user "${fileArray[0]}:${fileArray[1]}" $url
0 голосов
/ 13 февраля 2019

Если ваш массив содержит имя пользователя и пароль в первых двух элементах, и вы хотите избежать их зацикливания, попробуйте

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 относится к третьему элементу.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...