退出while循环后变量消失

时间:2017-05-10 07:50:08

标签: bash shell

我知道这个问题已被回答了很多次。但是,我还有一些问题需要澄清。首先让我粘贴我的代码片段:

  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循环读取之前重新构造文件?

1 个答案:

答案 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”命令。)您可以单独测试该部分并验证它是否选择了您想要的输入数据。