LINUX.ORG.RU

BASH: Как вывести значение переменной за пределы цикла?


0

0

bash

Есть такая конструкция (глупая, просто для примера)

A="0"
echo "Cool" | while read B ; do
  A="1"
done
echo $A

В итоге получаем на выход 0, а хотелось бы получить 1. Как это сделать? Иными словами как сделать, чтобы значение присваивалось не локальной A а глобальной A?
★★★★★

Re: BASH: Как вывести значение переменной за пределы цикла?

В общем случае никак, тут дело не в локальных переменных. Каждая
команда из твоего пепилайна пускается в своем собственном подшеле,
из него нельзя менять значения переменных родительского шела.

Более подробно можешь почитать, например, тут:

http://www.faqs.org/docs/bashman/bashref_48.html#SEC48

aton ()

Re: BASH: Как вывести значение переменной за пределы цикла?

Более-менее очевидный метод, если не надо ничего из цикла выводить:

#! /bin/bash

export A="0"
A=`
echo $'Cool\ncool' | (while read B ; do
  A=$[$A+1]
  echo qqqqq
done >/dev/null; echo $A )`
echo $A

anonymous ()
Ответ на: Re: jfs - упала зараза на ровном месте :( от dilmah

Re: jfs - упала зараза на ровном месте :(

Дык и это никто не отменял!

$ super_puper() { echo cool | { while read B; do echo 1;
exit; done 2>/dev/null; echo 0; }; }

$ A=`super_puper`
$ echo $A
1
$ A=`expr $(echo cool | wc -l) != 0`

io ★★ ()

Re: jfs - упала зараза на ровном месте :(

Особенно вариант с функцией понравился.

Прикольно. Спасибо за ответы, буду что-то думать.

". . . постепенно, шаг за шагом раскрывая мудрость и красоту Unix" (C) Advanced Bash-Scripting guide

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