У меня очень простой скрипт bash для вычисления суммы чисел, появляющихся в каждой строке файла (я знаю, что для этого есть более эффективные способы, но мне действительно нужна эта сумма в качестве вспомогательной информации, и сценарий должен быть чем-то более позже). Сценарий выглядит следующим образом:Почему переменные значения теряются после завершения цикла в bash?
TOTAL=0;
cat $DATAFILE | while read LINE;
do
COUNT=`echo $LINE| awk '{print $2;}'`;
TOTAL=$((TOTAL+COUNT));
done
echo "Total = $TOTAL";
Однако я всегда получаю вывод «Всего = 0». Удивительно, если я переместил последнюю строку внутри цикла while, я получаю правильный результат. Например, если входной файл содержит
A 5
B 3
C 6
Я получаю выход
Total = 5
Total = 8
Total = 14
Но текущая версия всегда выдает 0. Кажется, значение присваивается переменной TOTAL как-то теряется.
Может ли кто-нибудь помочь мне решить проблему?
Заранее спасибо
Поскольку правая сторона трубопровода выходит, когда труба завершена, если у вас нет 'shopt -s lastpipe'. –
[Я устанавливаю переменные в цикле, который находится в конвейере. Почему они исчезают после завершения цикла? Или, почему я не могу передать данные для чтения?] (Http://mywiki.wooledge.org/BashFAQ/024) – fedorqui