arrays - while循环只读最后一行?

标签 arrays linux bash shell

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

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

最佳答案

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

The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting.

因此,您可以通过在命令替换和参数扩展周围使用双引号使您的方法有效:

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

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

如果您确实想将 grep 输出行读取到一个数组中,每个元素一行,那么有 Bash Builtin Command 读取数组:

< <(grep name emp.txt) readarray foo

这使用扩展 Process Substitution .

i want to replace some text can i use sed command in echo "$line"

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

关于arrays - while循环只读最后一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49229418/

相关文章:

regex - 根据 Bash 中的模式重命名目录

javascript - 如何过滤对象数组但更改顺序

arrays - 使用文本文件和数组(需要解释)

c - 创建了多少进程

linux - ssh到另一台主机,运行涉及其他脚本的脚本,如何仅杀死其他脚本?

bash - 在管道传输到其他命令之前将标准输出重定向到缓冲区编辑器

用于扫描和打印任何基本数据类型数组的 C 函数

c++ - 我找不到段错误?

linux - ls 在容器内排序

Linux 与 Win 运行时计时