Zoredache apontou isso para mim no chat, e poige mencionou isso em sua resposta: esse problema pode ser resolvido com um subshell.
Quando eu tive que mudar de um loop for
que lia uma única variável do meu grep de uma vez para um while read var1 var2
loop que me permitia ler em múltiplas variáveis, eu era capaz de segurar variáveis temporárias I manipulado dentro do loop while usando parênteses para definir um subshell explícito. Aqui está um exemplo:
sum=0
grep volume configfile | head -n1 | (while read var1 var2; do
let sum=var1+var2
done
echo "The sum is $sum.")
Sem os parênteses, você sempre ecoará uma soma de 0. Com eles, você irá ecoar a soma dos dois primeiros valores na primeira linha correspondente do seu grep.
Além disso, como Poige aponta em outra resposta, você pode usar um subshell para preencher uma variável no escopo como esta:
var=$( cat file | while read a b; do
sum=a+b
echo "$sum"
done)
echo "$var"
Nesse caso, o valor de var que você faz eco no final seria a última soma que você calculou no loop, mesmo que a soma tenha sido destruída no final da sub-camada.