在Bash循环中生成IP地址列表

在Bash循环中生成IP地址列表,bash,Bash,我需要从130.15.0.0到130.15.255.255的IP地址列表。我尝试过这个,但我意识到它将创建255个列表。有人能帮我弄清楚吗 for (( i = 0; i <= 255; i++)) ; do for (( j = 0; j <= 255; j++)) ; do LIST="$LIST 130.15.$i.$j" done done 对于((i=0;i我想说你的方法是有效的,但它非常慢1。你可以使用大括号扩展来代替: echo 135.15.{0..255}.{0.

我需要从130.15.0.0到130.15.255.255的IP地址列表。我尝试过这个,但我意识到它将创建255个列表。有人能帮我弄清楚吗

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

对于((i=0;i我想说你的方法是有效的,但它非常慢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")
    
  • 不建议使用大写变量名,因为它们更可能与环境变量冲突(请参见第4段)


1事实上,在我的机器上,这几乎需要6分钟——大括号扩展只需要不到0.1秒!

你能添加你得到的输出并解释为什么它不是你期望的输出吗?看起来它创建了256*256=65536个IP。那么,怎么了?@Benjamin W.优雅地回答了K.U的问题,但对K.U问题的回答是n可以在这里找到(扰流板:
LIST+=(“130.15.$i.$j”)
declare-a LIST=()
在循环上方)到数组的元素