The OpenNET Project / Index page

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

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

"вернуть переменную из цикла while"  
Сообщение от evi9 email on 18-Фев-09, 12:21 
Есть цикл:

ls -l ( while read FILE ;

do

test BLA-BLA-BLA {
result="error"
continue
                  }
result="ok"
exit

done)

echo $result

Так вот, переменная result принимает значения "error" или "ok",
но по завершению цикла она стирается... echo в конце скрипта не выводит ничего. Как из цикла передать переменную?


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

 Оглавление

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


1. "вернуть переменную из цикла while"  
Сообщение от vic (??) on 18-Фев-09, 12:41 
а вы уверены что из цикла? ваш пример не запускается, не читабелен и не понятен. И судя по всему вы хотите получить переменную не из цикла, а из вложенного неявного subsh. А это решается иначе.

Для цикла же переменная нормально возвращается:


#!/bin/bash
for i in 1 2
do
    for j in 4 5
    do
        k=$((k+i+j))
        echo "iteration ($i $j) = $k"
    done
done
echo "result: $k"

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

2. "вернуть переменную из цикла while"  
Сообщение от gaa (ok) on 18-Фев-09, 12:48 
> Как из цикла передать переменную?

Цикл, возможно, запускается в отдельном интерпретаторе, переменные из которого в родительском не видны. Так что способ один: сохранить значение переменной в файл, а потом его оттуда прочесть.

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

3. "вернуть переменную из цикла while"  
Сообщение от phpcoder email(??) on 18-Фев-09, 13:06 
>> Как из цикла передать переменную?
>
>Цикл, возможно, запускается в отдельном интерпретаторе

Не "возможно", а точно, т.к. while заключен в круглые скобки, которые порождают отдельный интепретатор.

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

4. "вернуть переменную из цикла while"  
Сообщение от vic (??) on 18-Фев-09, 13:21 
>> Как из цикла передать переменную?
>
>Цикл, возможно, запускается в отдельном интерпретаторе, переменные из которого в родительском не
>видны. Так что способ один: сохранить значение переменной в файл, а
>потом его оттуда прочесть.

ну прямо один :)
- вернуть через код возврата если это нечто типа 0/1
- вернуть через stdout: kkk=`date`
- через файл и т.д.
а вообще осознать разницу между () и {} - subshell vs sameshell

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

5. "+5 копеек"  
Сообщение от Andrey Mitrofanov on 18-Фев-09, 14:01 
>Есть цикл:
>
>ls -l ( while read FILE ;

<ls -l | (....
, видимо.
>done)
>echo $result

google.ru + переменная цикл bash opennet.ru/openforum/
http:/openforum/vsluhforumID9/7255.html#1
http:/openforum/vsluhforumID9/7536.html#3

Продолжение осмотра:
http:/docs/RUS/bash_scripting_guide/

---Про не-bash - не интересно. Гугль работает - обращайтесь.

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

7. "+5 копеек"  
Сообщение от LS (ok) on 28-Фев-09, 05:33 
>>Есть цикл:
>>
>>ls -l ( while read FILE ;
>
><ls -l | (....

конвейер тоже в отдельном шеле пойдет

>[оверквотинг удален]
>>echo $result
>
>google.ru + переменная цикл bash opennet.ru/openforum/
>http:/openforum/vsluhforumID9/7255.html#1
>http:/openforum/vsluhforumID9/7536.html#3
>
>Продолжение осмотра:
>http:/docs/RUS/bash_scripting_guide/
>
>---Про не-bash - не интересно. Гугль работает - обращайтесь.

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

6. "вернуть переменную из цикла while"  
Сообщение от LS (ok) on 28-Фев-09, 05:18 
>[оверквотинг удален]
>result="ok"
>exit
>
>done)
>
>echo $result
>
>Так вот, переменная result принимает значения "error" или "ok",
>но по завершению цикла она стирается... echo в конце скрипта не выводит
>ничего. Как из цикла передать переменную?

нукак . все что внутри ()  - выполняется в отдельно запущенной оболочке. есть обходные маневры но на BLA-BLA примере непонятно , что Вы хотите сделать


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

8. "вернуть переменную из цикла while"  
Сообщение от LS (ok) on 28-Фев-09, 06:12 
[root@local 111]# ls
ttt.bsh  txt.txt
[root@local 111]# cat ttt.bsh
#!/bin/bash

function fff()
{
ls
}

function rrr()
{
echo $0
# cat $!
}

fff|while read nnn
do
cat $nnn|while read lll
do
   echo $lll
done
done


[root@local 111]#

---------------

[root@local 111]# ./ttt.bsh
#!/bin/bash

function fff()
{
ls
}

function rrr()
{
echo $0
}

fff|while read nnn
do
cat $nnn|while read lll
do
echo $lll
done
done


111
222
333
[root@local 111]#

пс. ну не сделал кат тхт.тхт - прошу на слово повери что там было 111 222 333 :)
пспс это один из вариантов "обхода" про которые я говорил и которые совершенно конкретно обозначил Andrey Mitrofanov


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

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

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




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

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