Почему мой счетчик Bash сбрасывается после цикла while

У меня есть сценарий 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

Результатом вышеизложенного является только строки:

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 и другие ресурсы.

Скрестив пальцы, кто-то другой может посмотреть на него и уйти «ну да! Вы должны ...»!

15
задан S42 15 February 2011 в 16:14
поделиться