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