我有一个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
Run Code Online (Sandbox Code Playgroud)
上面的输出是单独的行:
Done entry 1 Done entry 2 Finished writing /blah, 0 keys
我想要的输出是:
Done entry 1 Done entry 2 Finished writing /blah, 2 keys
我不太确定为什么nKeys在循环之后是0 :(我认为这是基本但是该死的,如果我能发现它尽管看了http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html和其他资源.
手指越过别人可以看着它然后"好吧!你必须......"!
在刚刚发布的Bash 4.2中,您可以这样做以防止创建子shell:
shopt -s lastpipe
Run Code Online (Sandbox Code Playgroud)
另外,正如您可能会在Ignacio提供的链接中看到的那样,您将无用cat.
while read -r line
do
...
done < afile
Run Code Online (Sandbox Code Playgroud)