Skip to content

heredoc и herestr в bash

В Python, например, есть встроенная конструкция ''' ... ''', но в bash есть особые идиомы встроенных документов (here-document/heredoc) и встроенных строк (here-string/herestr), позволяющие хранить и отображать блоки текста с минимумом разделителей/команд.

Heredoc

Синтаксис heredoc:

Bash
[fd]<<[-]["']word['"]
# [] - optional things

fd --> редко используемый идентификатор файла
дефис (-) --> удаляет начальные табуляции (не пробелы). Он позволит оформить встроенный документ с отступами (но только табами), которые автоматически удалятся при выводе.
кавычки --> выключают интерполяцию содержимого. Без кавычек можно юзать переменные.
word не подлежит расширению с помощью параметров/переменных/имен файлов/подстановке команд/арифметическим операциям. word не может быть переменной.

То есть в heredoc не сработает:

Bash
cat << $(ls)   # !! НЕ работает
cat <<< $(ls)  # Работает

Поэтому heredoc подходит для отображения справочной инфы (вместо использования множества echo/printf/кавычек).

Herestr

Синтаксис herestr:

Bash
[fd]<<<word
# [] - optional things

В word возможны расширения параметров/переменных, подстановки команд/арифметические операции. Это, по сути, более простой heredoc без разделителя с \n в конце.


Соус: Книга "Идиомы Bash" --> Глава 5. "Файлы и не только" --> "Встроенные документы и строки"

bash