3 回答

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
在剛剛發(fā)布的Bash 4.2中,您可以執(zhí)行以下操作以防止創(chuàng)建子外殼:
shopt -s lastpipe
另外,您可能會(huì)在Ignacio提供的鏈接中看到,您對的無用cat。
while read -r line
do
...
done < afile

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
如已接受的答案中所述,這是因?yàn)楣艿喇a(chǎn)生了單獨(dú)的子流程。為避免這種情況,command grouping一直是我的最佳選擇。也就是說,在子外殼中的管道之后進(jìn)行所有操作。
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
}
現(xiàn)在它將報(bào)告$nKeys“正確” 的值(即您希望的值)。
添加回答
舉報(bào)