Так, стандарт POSIX дозволяє це. Відповідно до версії 2008 року:
Цей документ розглядатиметься як одне слово, яке починається після наступного <newline>
і продовжується, поки не буде рядка, що містить лише роздільники та а <newline>
, без <blank>
символів між ними. Потім починається наступний документ тут, якщо такий є.
І включає цей приклад кількох "тут-документів" в одному рядку:
cat <<eof1; cat <<eof2
Hi,
eof1
Helene.
eof2
Тож немає ніяких проблем робити перенаправлення чи труби. Ваш приклад схожий на щось подібне:
cat file |
cmd
І граматика оболонки (далі на пов'язаній сторінці) включає такі визначення:
pipe_sequence : command
| pipe_sequence '|' linebreak command
newline_list : NEWLINE
| newline_list NEWLINE
;
linebreak : newline_list
| /* empty */
Отже, символ труби може супроводжуватися кінцевим рядком і все ще вважатися частиною трубопроводу.
big-long-command1 with lots of args << EOF | big-long-command2 with lots of args
. "Незвичайний синтаксис" здається найкращим способом.