TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #673 13.2K
Сегодня поговорим про подводные грабли.
ㅤ
Работая над скриптом решил немного оптимизировать код. А чего, зачем цикл, если строка всего одна.


echo "1"|
while read; do
echo $REPLY,2
done

# на

echo "1"| read
echo $REPLY,2


А не тут то было.

1,2
,2


Во втором случае read не читает значение. Точнее читает, иначе бы скрипт ожидал ввода с клавиатуры, но переменная REPLY пустая.

Перечитал help по read. Ничего не пойму. Пришлось обратиться к Роману.

Он пояснил, что во втором случае команда read запускается в отдельном subshell, считывает значение. Вот только передать переменную можно только в дочерние процессы, а в родительские нельзя.

Поэтому при завершении процесса read значение переменной REPLY теряется.

Пришлось читать, как работают конвейеры. Здесь писать не буду. Просто приведу ссылку на wiki: https://bit.ly/4fajufR

Оптимизировать можно, но так:

echo "1"| (read;echo $REPLY,2)
#или так
read < <(echo "1")
echo $REPLY,2
# если переменная одна то классика
a=$(echo 1)


Все, теперь я знаю, как работает pipeline. Надеюсь и Вы.

tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate
More from @bashdays
  1. Sep 24, 2026Post #1565
  2. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  3. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  4. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
  5. Sep 11, 2026🤖 DevOps в эпоху AI трансформации: что работает уже сейчас! 17 сентября Сбер собирает Dev…
  6. Sep 9, 2026Всем привет, с вами TagdTagd! Я тут вынужденно перешёл на MAX. Просто Telegram перестал ра…
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 →