1
grep -A 26 "some text" somefile.txt |
awk '/other text/ { gsub(/M/, " "); print $4 }' | while read line
do
   //operations resulting in a true of false answer
done

同时声明和使用的变量只存在于通过管道创建的子shell中,我如何从外部跟踪它们?我需要稍后在脚本中使用返回的 true 或 false

4

2 回答 2

3

使用进程替换:

while read line
do
   # operations resulting in a true of false answer
done < <(grep -A 26 "some text" somefile.txt | \
         awk '/other text/ { gsub(/M/, " "); print $4 }' )
于 2012-10-03T09:11:11.303 回答
1

如果您使用的是bash4.2 或更高版本,请设置该lastpipe选项。这会强制管道中的最后一个命令(在本例中为您的 while 循环)在当前 shell 而不是子 shell 中运行,因此您在循环中对变量所做的任何修改在完成后仍然可见。

于 2012-10-03T12:26:34.810 回答