我有一个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