是否有可能在使用这样的 shell 脚本时通过 grep 的结果:
while read line ; do
...
done < grep ...
谁能解释为什么这不起作用?有哪些替代方案?
谢谢!
看起来您正在尝试使用进程替换:
lines=5
while read line ; do
let ++lines
echo "$lines $line" # Number each line
# Other operations on $line and $lines
done < <(grep ...)
echo "Total: $lines lines"
如果grep
实际返回一些输出行,结果应该如下所示:
6: foo
7: bar
Total: 7 lines
这与grep ... | while ...
: 在前者grep
中运行在子外壳中,而在后者中,while
循环在子外壳中。这通常仅在您想在循环中保留某些状态时才相关 - 在这种情况下,您应该使用第一种形式。
另一方面,如果你写
lines=5
grep ... | while read line ; do
let ++lines
echo "$lines $line" # Number each line
# Other operations on $line and $lines
done
echo "Total: $lines lines"
结果将是:
6: foo
7: bar
Total: 5 lines
哎哟! 计数器被传递给子shell(管道的第二部分),但它不会返回给父shell。
grep
是一个命令,但done < grep
它告诉 shell 使用名为 grep的文件作为输入。你需要类似的东西:
grep ... | while read line ; do
...
done