Глобальные переменные и труба

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

dergachev
Сообщения: 847
ОС: archlinux

Глобальные переменные и труба

Сообщение dergachev »

Вот такой код:

Код: Выделить всё

#!/bin/sh
a=0
echo "test test test" | while read line; do
    echo "$line"
    a=1
done
echo $a

Выводит:

Код: Выделить всё

test test test
0


Могу ли я вообще назначить a изнутри такого while?
Спасибо сказали:
Аватара пользователя
Brainsburn
Сообщения: 950
Статус: /
ОС: Gentoo

Re: Глобальные переменные и труба

Сообщение Brainsburn »

dergachev писал(а):
20.04.2013 10:17
Могу ли я вообще назначить a изнутри такого while?

Нет. Говоря простым языком, эта часть скрипта выполняется отдельным интерпретатором.
Спасибо сказали:
Аватара пользователя
Brainsburn
Сообщения: 950
Статус: /
ОС: Gentoo

Re: Глобальные переменные и труба

Сообщение Brainsburn »

Попробуйте такой код:

Код: Выделить всё

 #!/bin/bash
 a=0
 while read line
 do
     echo "$line"
     a=1
 done < <(echo "one two three")
 echo $a


$ ./test.sh
one two tree
1


В первой строке должен быть именно bash, а не sh. Погуглить можно bash process subustitution.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21432
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Глобальные переменные и труба

Сообщение Bizdelnick »

Только если избавитесь от конвейера.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: Глобальные переменные и труба

Сообщение dergachev »

Воо, спасибо, всё понял :)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: Глобальные переменные и труба

Сообщение /dev/random »

Немного опоздал, но в bash есть опция lastpipe, позволяющая выполнять последнюю часть пайпа в основном интерпретаторе, а не в сабшелле.
Спасибо сказали: