我有一个Bash脚本,我想在其中计算在循环文件时完成了多少操作。计数似乎在循环中起作用,但是在此之后,变量似乎已重置。

nKeys=0
cat afile | while read -r line
do
  #...do stuff
  let nKeys=nKeys+1
  # this will print 1,2,..., etc as expected
  echo Done entry $nKeys
done
# PROBLEM: this always prints "... 0 keys"
echo Finished writing $destFile, $nKeys keys

上面的输出仅是以下几行的内容:

完成输入1
完成输入2
完成写/blah,0键

我想要的输出是:

完成输入1
完成输入2
完成写/blah,2键

我不太确定为什么循环后nKeys为0 :(我认为这是基本的东西,但是尽管查看了http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html和其他资源,但是如果我能发现它,那该死的。

手指交叉着别人可以看着它,然后走开,“好吧!你必须……”!

最佳答案

在刚刚发布的Bash 4.2中,您可以执行以下操作以防止创建子 shell :

shopt -s lastpipe

另外,您可能会在Ignacio提供的链接中看到,您有一个Useless Use of cat
while read -r line
do
    ...
done < afile

07-24 19:50