TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #613 601
Когда переменные пропадают

Одна из частых ловушек в bash - переменная изменилась… но снаружи осталась прежней. Причина почти всегда одна - subshell.

▪️ Что такое subshell. Subshell - это дочерний процесс bash. Он получает копию переменных, но изменения не возвращаются назад. Создается, например, здесь:


( command )


или в пайпах:


command | while read ...


▪️ Классическая проблема


count=0

echo -e "a\nb\nc" | while read -r line; do
((count++))
done

echo "$count"


Результат: 0

Почему? Цикл while выполняется в subshell.

▪️ Правильный вариант


count=0

while read -r line; do
((count++))
done < <(echo -e "a\nb\nc")

echo "$count"


Результат: 3

Теперь цикл работает в текущем shell.

▪️ Ещё пример


x=1

( x=5 )

echo "$x"


Результат: 1
Изменение потерялось.

▪️ Когда это полезно. Subshell - это не баг, а инструмент. Например:


( cd /tmp && ls )


внутри меняем каталог, а снаружи остаемся там же

BashTex 📱 #scripts
  • 👍 5
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →