Попробуйте это:
for ip in 10.11.{32..47}.{0..255}
do
echo 10.11.{32..35}.{39..61} | grep -q "\<$ip\>" && continue
echo "<ip>${ip}</ip>"
done
Это, конечно, это простое решение, которое до сих пор петли через комплект и выбрасывают некоторые нежелательные элементы. Как показывает ваш комментарий, это может привести к ненужным задержкам во время пропущенных частей. Чтобы избежать этого, вы можете генерировать значения параллельно с обработкой, как это:
for ip in 10.11.{32..47}.{0..255}
do
echo 10.11.{32..35}.{39..61} | grep -q "\<$ip\>" && continue
echo "${ip}"
done | while read ip
do
process "$ip"
done
Если process "$ip"
принимает по крайней мере, минимальное количество времени, то время для генерации значений, скорее всего, не больше учитываются.
Если вы хотите полностью пропустить значения, вы также можете использовать более сложный термин для своих IP-адресов (но тогда уже не будет ясно, как этот код был получен из спецификации, которую вы дали в своем вопросе, поэтому я лучше комментирую он тщательно):
# ranges below result in
# 10.11.{32..47}.{0..255} without 10.11.{32..35}.{39..61}:
for ip in 10.11.{32..35}.{{0..38},{62..255}} 10.11.{36..47}.{0..255}
do
echo "${ip}"
done
вы спрашиваете, если вы можете получить расширение скобки, чтобы сделать это для вас или вы спрашиваете, как писать логику в цикле, чтобы исключить эти диапазоны? –