2014-11-05 40 views
0

我想使用重定向(学习目的),并想知道如何我可以引用这个数组,所以我可以遍历它。我知道还有其他方法,但我试图坚持重定向。在bash /重定向到一个循环引用数组

#!/bin/bash 
count=0 
for i in 10.10.{0..255}.{0..255} 
do 
ips[$count]=$i 
let count+=1 
done 

echo -e "$count = count\n" #test code for amount 

#problem code: trying to feed the array to the while loop via redirection 
while read $element; do 
echo -en "$element\n" 
done < ${ips[@]} 

回答

0

使用<<<重定向字符串(副<它接受文件名)。这不是循环访问数组的最自然的方法:您还必须使用read -d' '来分隔空格而不是换行符。

while read -d' ' $element; do 
    echo -en "$element\n" 
done <<< "${ips[@]}" 

为了比较,遍历数组的更地道的方式是:

for ip in "${ips[@]}"; do 
    echo -en "$ip\n" 
done 

而且,它的价值,你可以简化第一回路:

for i in 10.10.{0..255}.{0..255}; do 
    ips+=($i) 
done 

甚至简单:

ips=(10.10.{0..255}.{0..255}) 
+0

感谢您的澄清。这是有道理的,而不是遍历数组来获得计数。关于引用的另外一个问题,你能解释一下这个语句里发生了什么(总分解),比如$(something)究竟做了什么? hashsign的引用是什么?谢谢。 '$ {#ips [@]}' – genx1mx6 2014-11-05 01:22:32

+0

散列符号获取数组中的项目数。 '$ {ips [@]}'是地址列表,'$ {#ips [@]}'是计数。 – 2014-11-05 01:58:50