The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"BASH: Как вывести значение переменной за пределы цикла?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"BASH: Как вывести значение переменной за пределы цикла?"  
Сообщение от Kroz email(ok) on 17-Фев-07, 00:38 
bash

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "BASH: Как вывести значение переменной за пределы цикла?"  
Сообщение от gyn61 (ok) on 17-Фев-07, 09:59 
>bash
>
>Есть такая конструкция (глупая, просто для примера)
>
>A="0"
>echo "Cool" | while read B ; do
>  A="1"
>done
>echo $A
>
>В итоге получаем на выход 0, а хотелось бы получить 1. Как
>это сделать? Иными словами как сделать, чтобы значение присваивалось не локальной
>A а глобальной A?

В таком виде никак. Проблема не в цикле а в конвейере из-за которого порождается сабшелл. В таком виде работает:

A="0"
echo "Cool" > temp_file
while read B ; do
  A="1"
done < temp_file
echo $A

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "BASH: Как вывести значение переменной за пределы цикла?"  
Сообщение от Kroz email(ok) on 17-Фев-07, 11:33 
>В таком виде никак. Проблема не в цикле а в конвейере из-за
>которого порождается сабшелл. В таком виде работает:
>
>A="0"
>echo "Cool" > temp_file
>while read B ; do
>  A="1"
>done < temp_file
>echo $A

Интересно. Спасибо.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "BASH: Как вывести значение переменной за пределы цикла?"  
Сообщение от ACCA (ok) on 21-Фев-07, 07:42 
A="0"
while read B
do
  A="1"
done < <(echo "Cool")
echo $A

Обрати внимание, что между < < есть пробел, а между <( пробела нет. Шаг влево или вправо - попытка побега. Прыжок на месте - провокация.

Ключевые слова "subshell avoidance".

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "BASH: Как вывести значение переменной за пределы цикла?"  
Сообщение от Kroz email(ok) on 21-Фев-07, 09:02 
>A="0"
>while read B
>do
>  A="1"
>done < <(echo "Cool")
>echo $A
>
>Обрати внимание, что между < < есть пробел, а между <( пробела
>нет. Шаг влево или вправо - попытка побега. Прыжок на месте
>- провокация.
>
>Ключевые слова "subshell avoidance".

М-да. Такой конструкции я не знал.
Thanks!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру