是否可以使用像这样的shell脚本来查看grep的结果:
while read line ; do
...
done < grep ...
任何人都可以解释为什么这不起作用?有哪些替代方案?
谢谢!
答案 0 :(得分:4)
您似乎尝试使用process substitution:
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
在subshell中运行,而在后者中,while
循环在子shell中。如果你想在循环中保留一些状态,这通常只是相关的 - 在这种情况下你应该使用第一种形式。
另一方面,如果你写
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。
答案 1 :(得分:3)
grep
是一个命令,但done < grep
告诉shell使用名为grep的文件作为输入。你需要这样的东西:
grep ... | while read line ; do
...
done