我想逐行打印 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/