Добавить элементы в массив - цикл

Мне нужен список IP-адресов от 130.15.0.0 до 130.15.255.255. Я попробовал это, но понял, что он создаст 255 списков. Может кто-нибудь, пожалуйста, помогите мне понять это?

for (( i = 0; i <= 255; i++)) ; do
for (( j = 0; j <= 255; j++)) ; do
LIST="$LIST 130.15.$i.$j"
done
done

Ответ 1

Я бы сказал, что ваш подход работает, но он очень медленный 1. Вместо этого вы можете использовать расширение скобок:

echo 135.15.{0..255}.{0..255}

Или, если вы хотите получить результат в переменной, просто назначьте:

list=$(echo 135.15.{0..255}.{0..255})

Если вам нужны адреса в массиве, вы можете пропустить замену echo и команды:

list=(135.15.{0..255}.{0..255})

Теперь list - это правильный массив:

$ echo "${list[0]}"                    # First element
135.15.0.0
$ echo "${list[@]:1000:3}"             # Three elements in the middle
135.15.3.232 135.15.3.233 135.15.3.234

Комментарии к вашему коду:

  • Вместо

    list="$list new_element"
    

    легче добавить к строке с помощью

    list+=" new_element"
    
  • Если вы хотите добавить к массиву в цикле, вы должны использовать

    list+=("new_element")
    
  • Имена переменных верхнего регистра не рекомендуются, так как они с большей вероятностью столкнутся с переменными среды (см. POSIX spec, параграф 4)

1 Фактически, на моей машине это занимает почти шесть минут. ndash; расширение скобки занимает менее 0,1 секунды!