如果我这样做的话,请在文本文件中说
grep FINAL *.msg
它返回
FINAL COMPUTATIONS: Elapsed Time: 000:30:55.65; CPU Time: 000:30:26.53
FINAL COMPUTATIONS: Elapsed Time: 000:28:11.77; CPU Time: 000:27:41.36
现在如果我做 for 循环
for line in `grep FINAL *.msg`
"$line"
不将其视为"FINAL COMPUTATIONS: Elapsed Time: 000:30:55.65; CPU Time: 000:30:26.53"
单行。
我该如何解决这个问题?
答案1
DopeGhoti 绝对正确,这里有一些可能更合适的东西。在进程替换的帮助下,从 grep 输出中逐行读取(模式应用于当前目录中的所有 *.msg 文件):
i=0;
while read -r line; do
echo $((i++)) "$line";
done < <(grep "FINAL" ./*.msg)
代码片段没有 shellcheck 警告:)
答案2
它与 shell 分割输入的方式有关。请记住,除非另有说明,否则任何空格通常都会分割输入:
$ echo "Foo bar baz"
Foo bar baz
$ for word in $(echo "Foo bar baz"); do echo $word; done
Foo
bar
baz