Bash: добавление элементов в массив для цикла for - PullRequest
0 голосов
/ 29 октября 2018

У меня есть список имен хостов, таких как:

hostnames = (host1 host2 host3)

Кроме того, я пытаюсь преобразовать эти имена хостов в IP-адреса:

for host in ${hostnames[@]}; do
    var=`doing some stuff`  # It returns IP address with odd spaces
    ips+=`(echo $var|xargs)`  # Removes odd spaces

Работает, но возвращается в следующем формате:

127.0.0.1127.0.0.2127.0.0.3

Я ожидаю, что ips позволит сделать итерацию по нему и извлечь с помощью индексации:

echo ${ips[2]}  # Should return 127.0.0.3

for (( i=0; i<${#ips[@]}; i++ )); do
    echo ${ips[i]}

и т.д.

Как правильно добавить эти IP-адреса, чтобы можно было перебирать эти значения и извлекать их по индексу?

1 Ответ

0 голосов
/ 29 октября 2018

Не должно быть пробелов вокруг знака равенства:

hostnames=(host1 host2 host3)

Чтобы добавить записи в массив, вам нужны круглые скобки за пределами обратные галочки:

ips+=(`echo $var|xargs`)

Более простой способ удаления пробелов - замена ${var//pattern/string}. Это быстрее, поскольку позволяет избежать ненужных дочерних процессов.

ips+=("${var// }")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...