Как использовать heredoc внутри функции bash?


12

Возможно ли вставить heredoc в функцию bash?

Тривиальный пример ниже приводит к ошибке: ./heredoc_in_function.sh: 10: Syntax error: end of file unexpected (expecting "}")

#!/bin/sh

my_function () {
cat <<HEREDOC
heredoc contents
HEREDOC
}

my_function

Окружающая обстановка:

  • Ubuntu 11.04 (GNU / Linux 2.6.38-8-server x86_64)
  • GNU bash, версия 4.2.8 (1) -релиз (x86_64-pc-linux-gnu)

У меня сложилось впечатление, что heredoc - вещь Perl. Есть ли основания полагать, что это сработает в BASH?
JDW

@jdw, здесь документы представлены на многих языках, включая bash.
Зоредаче

Я вижу это сейчас. Здорово.
JDW

Ответы:


10

Ваш код выглядел хорошо для меня, поэтому я скопировал его строка за строкой, и он работал для меня:

  • OSX 10.7, bash 3.2.48 (1) -релиз (x86_64-apple-darwin11).
  • Ubuntu 10.04.3, bash 4.1.5 (1) -релиз (x86_64-pc-linux-gnu)

Можете ли вы перепечатать файл вручную, чтобы убедиться, что вы не пропустили или добавили пробелы / табуляции / и т. Д.?

Кроме того, как ты это делаешь? Я сделал chmod +x test.shа потом./test.sh

РЕДАКТИРОВАТЬ: я получил ту же ошибку, что и вы, когда я добавил пробел в начале строки с закрывающим HEREDOC.

Дальнейшее примечание: завершающий пробел за закрытием HEREDOCтакже может вызвать это


1
Странно, теперь это работает ... Подсветка синтаксиса Vim распознала HEREDOC раньше (этого не происходит, если вы добавляете это пространство перед закрытием HEREDOC). Я изменил исходный скрипт, чтобы использовать только внешний файл, поэтому я не уверен, что был неправ. Хотя с heredocs это будет намного удобнее!
Leftium

1
В самом деле! Я люблю меня некоторые heredocs.
Дэвид

1
Дополнительно: это HEREDOCможет привести к
пробелу в
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.