Isso é um erro "comum". Os pipes criam SubShells, portanto, o while read
está sendo executado em um shell diferente do seu script, o que faz com que sua variável CNT
nunca seja alterada (somente aquela dentro da subpasta de pipe).
Agrupe o último echo
com a subshell while
para consertá-lo (há muitas outras maneiras de consertá-lo, essa é uma. As respostas de Iain e Ignacio têm outras.)
CNT=0
cat input.data | ( while read
do
let CNT++;
echo "Counting to $CNT"
done
echo "Count is $CNT" )
Longa explicação:
- Você declara
CNT
no seu script como valor 0;
- Um SubShell é iniciado no
|
to while read
;
- Sua variável
$CNT
é exportada para o SubShell com valor 0;
- O SubShell conta e aumenta o valor de
CNT
para 5;
- SubShell termina, variáveis e valores são destruídos (eles não retornam ao processo / script de chamada).
- Você
echo
do seu valor CNT
original de 0.