![]() |
|
Модераторы: powerfox, ZeeLax |
![]()
|
|
| leniviy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Здравствуйте. Есть программа, которая выводит результаты в виде таблицы. разделитель пробел. Хочу прочитать каждое поле в переменную. Обычная конструкция такая:
внутри цикла переменные видны. Но мне надо вызывать прогу (в данном случае echo "1 2 3") внутри другого цикла и сохранять прочитанные переменные до следующего вызова.
вне цикла while read переменные $A, $B, $C не видны. Что же делать? |
||||
|
|||||
| nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 41 Всего: 181 |
while read... выполняется в subshell, соответственно все переменные изменяются только локально в цикле.
В bash есть переменная BASH_SUBSHELL, посмотри что выводит вот это:
Читать тут Добавлено через 2 минуты и 20 секунд ЗЫ. По шелл-программированию лучше спрашивать в общих вопросах. Модератор: Тема перенесена -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Я понял как. Надо избавиться от пайпов примерно так:
правда я не понял, что такое "<<" |
|||
|
||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 113 Всего: 317 |
a я бы объяснил это явление проще: как в C или других языках, у переменных есть длинна жизни и scope.
если ты определяешь переменную ДО цикла, то ее значение сохранится. а если определяешь во время цикла, то она умрёт после него. можно сделать и так: создать спец. переменные до цикла, пользоваться своими ABC, и запихать их в другие ( специальные) если непонятно:
но вообще-то так не рекомендуется работать. принимают переменные по одной, проверку ввода делают. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| nickless |
|
||||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 41 Всего: 181 |
Можно конечно и heredoc-ом, но вообще по ссылке что я дал написано
В случае subshell ситуация сложнее, subshell выполняется как отдельный процесс (или симулирует это поведение), соответственно изменение любых переменных внутри subshell имеют только локальный эффект, даже export тут ничего не изменит.
Это сильно зависит от шелла, в bash (и если /bin/sh -> /bin/bash) работать не будет. В zsh работает. Какой у тебя шелл? Добавлено через 5 минут и 37 секунд ЗЫ Конечно если используется bash, работает ли тот способ в других шеллах я не пробовал. -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||||
|
|||||||
![]()
|
| Правила форума "Linux/UNIX: Oбщие вопросы" | |
|
|
В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |