我想逐行打印foo的所有数组数据,但这个循环是 打印最后一行数组字符串它不是打印所有行 数组变量请帮忙。
foo=( $(grep name emp.txt) )
while read -r line ; do echo "$line"
done <<< ${foo[@]}
答案 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 …
。