Aug 10, 2011

bash: variable loses value at end of while read loop


I have a problem in one of my shell scripts. Asked a few colleagues, but they all just shake their heads (after some scratching), so I’ve come here for an answer.

According to my understanding the following shell script should print “Count is 5” as the last line. Except it doesn’t. It prints “Count is 0”. If the “while read” is replaced with any other kind of loop, it works just fine. Here’s the script:

echo "1">
echo "2">>
echo "3">>
echo "4">>
echo "5">>input.dataCNT=0 cat | while read ;
  let CNT++;
  echo "Counting to $CNT"
echo "Count is $CNT"

Why does this happen and how can I prevent it? I’ve tried this in Debian Lenny and Squeeze, same result (i.e. bash 3.2.39 and bash 4.1.5.
I fully admit to not being a shell script wizard, so any pointers would be appreciated.


BASh FAQ entry #24: “I set variables in a loop. Why do they suddenly disappear after the loop terminates? Or, why can’t I pipe data to read?”

Related posts:

  1. Bash script error: ./test: line 5: UID: readonly variable
  2. Bash script to count number of files
  3. for loop multiple variables
  4. bash whiptail variable parameters
  5. Bash script normal user to Root

Leave a comment