Pode ser útil introduzir outra substituição de comando, com a lógica do loop principal definida em uma função:
sum_cost() {
sum=0
while read -r line ; do
IFS=',' read -a array <<< "$line"
sum=$(echo "$sum + ${array[7]}" | bc)
done
echo $sum
}
for filename in data*.CSV; do
echo $filename
ACTUAL_COST=$(grep '040302010' $filename | sum_cost)
echo $ACTUAL_COST
done