在Bash循环中生成IP地址列表
我需要从130.15.0.0到130.15.255.255的IP地址列表。我尝试过这个,但我意识到它将创建255个列表。有人能帮我弄清楚吗在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.
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=()
在循环上方)到数组的元素