Встроенный документ (here document)
Встроенный документ (here document) является специальной формой перенаправления ввода-вывода, которая позволяет передать список строк команде или программе. Конец встроенного документа выделяется «строкой-ограничителем», которая задается с помощью специальной последовательности символов <<
. В качестве строки-ограничителя должна выбираться такая последовательность символов, которая не будет встречаться в теле «встроенного документа».
Ниже приведен простой пример применения данной конструкции, где каждая ввседенная строка передается команде wc
в качестве стандартного потока ввода до тех пор, пока не встретится строка END-OF-DATA
:
$ wc -l <<END-OF-DATA > Первая строка текста > Вторая строка теста > Третья строка теста > END-OF-DATA 3
Встроенные документы часто используются в сценариях:
#!/bin/bash
mail $* <<END-OF-MESSAGE
Это первая строка сообщения.
Это вторая строка сообщения.
Это третья строка сообщения.
END-OF-MESSAGE
Отправим это сообщение всем пользователям из файла users-list.txt
:
$ ./send-message.sh $(cat users-list.txt)
Если внутри встроенного документа встречаются переменные, обратные кавычки и конструкция $(…)
, то переменные будут подставлены, а команды выполнены.
#!/bin/bash
cat <<END-OF-MESSAGE
Текущая директория: $PWD
Список файлов: $(ls -la $PWD)
END-OF-MESSAGE
$ ./pwd-ls.sh Текущая директория: /home/evgeniy Список файлов: итого 2952 ..........
Если строка-ограничитель встроенного документа начинается с символа -
(<<-END-OF-DATA
), то это приводит к подавлению вывода символов табуляции (но не пробелов). Это может оказаться полезным при форматировании текста сценария для большей удобочитаемости.
#!/bin/bash
cat <<END-OF-MESSAGE
Это первая строка сообщения.
Это вторая строка сообщения.
Это третья строка сообщения.
END-OF-MESSAGE
cat <<-END-OF-MESSAGE
Это первая строка сообщения.
Это вторая строка сообщения.
Это третья строка сообщения.
END-OF-MESSAGE
Результат работы сценария:
$ ./message.sh Это первая строка сообщения. Это вторая строка сообщения. Это третья строка сообщения. Это первая строка сообщения. Это вторая строка сообщения. Это третья строка сообщения.