我知道这个问题已被回答了很多次。但是,我还有一些问题需要澄清。首先让我粘贴我的代码片段:
1 #!/bin/bash
2 declare -a test
3 declare -i counter
4
5 while read x;
6 do
7 test[counter]=$x
9 ((counter++))
10 done < reg.txt
11 echo "---------------------"
12 echo ${test[0]}
13 echo ${test[1]}
reg.txt中的数据是
1.1.1.1
2.2.5.6
45.25.12.45
1.1.2.3
1.1.3.4
我知道要正确地将数据放入数组测试中,我必须使用&#39;&lt;&#39;转文件&#34; reg.txt&#34;输入数据。但是,我该怎么选择ip地址包含&#34; 1.1&#34;。
在第10行,我尝试了不同的东西,例如:
done < reg.txt|grep "1.1" #Using this way makes the 'test' array empty.
或者这个:
done < <(reg.txt | grep "1.1")
语法不正确。 (很多人建议这样做,我不知道为什么)。
总之,我的意思是,有没有办法在while循环读取之前重新构造文件?
答案 0 :(得分:1)
使用以下语法:
done < reg.txt|grep "1.1"
没有做你想做的事;相反,它将grep命令应用于while循环的输出。
测试数组确实填充了5个值,但是在while循环完成后不会记住这些值 - 正如此问题的答案中所述:Modifying a variable inside while loop is not remembered
您正在寻找的是:
done < <(cat reg.txt | grep "1\.1")
请注意,括号内的部分是管道,它必须是有效的bash命令。 (您错过了“cat”命令。)您可以单独测试该部分并验证它是否选择了您想要的输入数据。