Як використовувати heredoc всередині функції bash?


12

Чи можна вставити гередок всередині функції 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-сервер x86_64)
  • GNU bash, версія 4.2.8 (1) -випуск (x86_64-pc-linux-gnu)

У мене було враження, що гередок - це справа Перла. Чи є підстави вважати, що це буде працювати в БАШ?
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

EDIT: Я отримав таку ж помилку, що і ви, коли я додав пробіл на початку рядка із закритим HEREDOC.

Подальша примітка: Задній простір за закриттям HEREDOCтакож може викликати це


1
Дивно, це працює зараз ... Виділення синтаксису кольорів Vim розпізнавало HEREDOC раніше (це не так, якщо ви додасте це місце перед закриттям HEREDOC) Я змінив оригінальний сценарій, щоб просто використовувати зовнішній файл, тому я не впевнений, що було неправильно. З гередоками буде набагато зручніше!
Лефтій

1
Справді! Я люблю мене кілька гередок.
Девід

1
Додатково: Задній простір за закриттям HEREDOCтакож може спричинити це (подібні помилки справді важко відстежити.
Зітхнути
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.