xref: /freebsd/bin/sh/tests/parser/heredoc10.0 (revision 62cfcf62f627e5093fb37026a6d8c98e4d2ef04c)
1# $FreeBSD$
2
3# It may be argued that
4#   x=$(cat <<EOF
5#   foo
6#   EOF)
7# is a valid complete command that sets x to foo, because
8#   cat <<EOF
9#   foo
10#   EOF
11# is a valid script even without the final newline.
12# However, if the here-document is not within a new-style command substitution
13# or there are other constructs nested inside the command substitution that
14# need terminators, the delimiter at the start of a line followed by a close
15# parenthesis is clearly a literal part of the here-document.
16
17# This file contains tests that may not work with simplistic $(...) parsers.
18# The open parentheses in comments help mksh, but not zsh.
19
20failures=0
21
22check() {
23	if ! eval "[ $* ]"; then
24		echo "Failed: $*"
25		: $((failures += 1))
26	fi
27}
28
29check '"$(cat <<EOF # (
30EOF )
31EOF
32)" = "EOF )"'
33
34check '"$({ cat <<EOF # (
35EOF)
36EOF
37})" = "EOF)"'
38
39check '"$(if :; then cat <<EOF # (
40EOF)
41EOF
42fi)" = "EOF)"'
43
44check '"$( (cat <<EOF # (
45EOF)
46EOF
47))" = "EOF)"'
48
49exit $((failures != 0))
50