LINUX.ORG.RU

bash-скрипт - область видимости переменных


0

0

Добрый день
пишу скриптик, не могу понять - почему значение переменных не сохраняется:
...
#Читаем файл
#первая строка
i=0
head -n1 $UTF_FILE | tr "[:lower:]" "[:upper:]" | awk -F\; '{for(k = 1 ; k <= NF ; k++) print $k}'|\
while read FIELD_NAMES
do
i=`expr $i + 1`
case $FIELD_NAMES in
FIRST?NAME)
FIRST_NAME=$i
#Здесь выводим на экран значение
echo $FIRST_NAME
;;
esac
done
#а вот здесь значение FIRST_NAME не обнаруживается!
echo $FIRST_NAME
...

подскажите - что неверно в моем скрипте, а то уже закипели мозги :)
Спасибо.

anonymous

> что неверно в моем скрипте

Конвейер.

Компоненты конвейера (у вас, в частности, цикл while) исполняются в сабшеллах. Тупой способ борьбы --

head | awk > tempfile
while do done < tempfile

Тогда цикл останется в текущем шелле с правильным доступом к переменным.

Правильнее, imho, разместить цикл и все остальное в общем сабшелле:

head | awk | { while do done; etc }

В общем, man bash, как обычно.

vnp
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.