虽然循环只读最后一行?

时间:2018-03-12 06:40:37

标签: arrays linux bash shell

我想逐行打印foo的所有数组数据,但这个循环是 打印最后一行数组字符串它不是打印所有行 数组变量请帮忙。

foo=( $(grep name  emp.txt) ) 
while read -r line ; do echo "$line"
done <<< ${foo[@]}

1 个答案:

答案 0 :(得分:2)

虽然David C. Rankin提出了一个可行的替代方案,但他选择不解释为什么原始方法不起作用。请参阅Bash Reference Manual: Word Splitting

  

shell扫描参数扩展命令的结果   替换和未发生的算术扩展   用于分词的双引号。

因此,您可以通过使用命令替换的双引号以及参数扩展来使您的方法工作:

foo=("$(grep name emp.txt)") 
while read -r line; do echo "$line"
done <<<"${foo[@]}"

请注意,这会将整个grep输出分配给唯一的数组元素${foo[0]},i。例如,我们根本不需要数组,也可以使用简单的变量foo

如果您确实想要将grep输出行读入每个元素一行的数组中,那么Bash Builtin Command readarray

< <(grep name emp.txt) readarray foo

这使用展开Process Substitution

  

我想替换一些文本我可以在echo&#34; $ line&#34;

中使用sed命令

当然,您可以使用echo "$line" | sed …