Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Bash, локальные/глобальные переменные, область видимости?  (Прочитано 1519 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dexel

  • Автор темы
  • Активист
  • *
  • Сообщений: 295
    • Просмотр профиля
Здравствуйте.
Разве в bash есть область видимости, или это read непонятно как работает.
Вообще там мне нужно собрать все aid через сепаратор в строчку, и вывести эхом.

aids=
echo "$content" | while read line
do
    aid=$(echo "$line" | sed -e 's/.*data-aid="\([0-9]\+\)".*/\1/')
    aids=3 #="${aids}|${aid}" # вот эта тройка даже не присваивается. Почему?
    echo "$aid" # Здесь вывод есть
done

echo "$aids" # Пустую строку выводит

Оффлайн SvMidi

  • Активист
  • *
  • Сообщений: 815
    • Просмотр профиля
Это цикл, за его пределами ничего не видно. Либо пиши в фйал, или ещё можно извратиться "сделав цикл переменной" или как то так.
Обсуждалось не раз https://www.google.ru/search?q=bash+%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F+%D0%B8%D0%B7+%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&oq=bash+%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F+%D0%B8%D0%B7&aqs=chrome.2.69i57j0l5.14714j0j4&sourceid=chrome&es_sm=93&ie=UTF-8
« Последнее редактирование: 18 Январь 2015, 00:49:52 от SvMidi »
Я знаю только то, что ничего не знаю, остальные не знают и этого.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6014
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Вы вообще ничего про субпроцессы и наследование переменных не знаете? Вы while запускаете через конвейер, т.е в отдельном субпроцессе и, естественно, в основном значение переменной не меняется. Это уже бесконечное количество раз описывалось и всегда в качестве контр-примера и приводится конструкция команда | while… Попробуйте поступить согласно каноническим правилам и все будет ОК:
Код: Bash
  1. unset aids
  2. while read line
  3. do
  4.     aid=${line##*data-aid=\"}
  5.     aids=${aids:=${aids}|}${aid%%\"*}
  6.     #aids=3 #="${aids}|${aid}" # вот эта тройка даже не присваивается. Почему?
  7.     #echo "$aid" # Здесь вывод есть
  8. done <<< "$content"
  9. echo "$aids"
И еще, Вы уверены что после echo "$content" останутся кавычки в строке?
« Последнее редактирование: 18 Январь 2015, 00:52:35 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Dexel

  • Автор темы
  • Активист
  • *
  • Сообщений: 295
    • Просмотр профиля
Ааааай, япппонский магнитофон. Там же конвеер!
Да глаза замылил этот read... Всё ясно как божий день.
Конечно, субпроцессом цикл, какая нафиг связь с внешними переменными)
Да, спасибо  :D

 

Страница сгенерирована за 0.15 секунд. Запросов: 24.