/ / Echo mostrando o valor errado da variável no bash após um bloco while. Por quê? [duplicado] - bash, shell, echo

Eco mostrando o valor errado da variável no bash após um bloco while. Por quê? [duplicado] - bash, shell, echo

Eu queria fazer um script rápido para contar o número de linhas que meus arquivos .scala têm:

#!/bin/bash

counter=0;
find -iname "*.scala" | while read f; do
lc=$(cat $f | wc -l);
counter=$((counter+lc));
echo "$lc $counter";
done
echo "final result: $counter";

Mas infelizmente isso imprime

20 20
204 224
212 436
final result: 0

O que está errado aqui?

Respostas:

3 para resposta № 1

O problema é causado porque você usa um tubo antes do seu loop while.

Ao fazê-lo, bash cria automaticamente um novo subshell. Todas as modificações que você fizer serão executadas no novo contexto e não serão propagadas quando o contexto for fechado.

Usar substituição de processo em vez de :

#!/bin/bash

counter=0;
while read f; do
lc=$(cat $f | wc -l);
counter=$((counter+lc));
echo "$lc $counter";
done < <(find -iname "*.scala")
echo "final result: $counter";