sh: Sync with FreeBSD:
[dragonfly.git] / tools / regression / bin / sh / parser / heredoc9.0
1 # $FreeBSD: head/tools/regression/bin/sh/parser/heredoc9.0 221887 2011-05-14 14:19:30Z jilles $
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 also work with simplistic $(...) parsers.
18
19 failures=0
20
21 check() {
22         if ! eval "[ $* ]"; then
23                 echo "Failed: $*"
24                 : $((failures += 1))
25         fi
26 }
27
28 check '`${SH} -c "cat <<EOF
29 EOF)
30 EOF
31 "` = "EOF)"'
32
33 check '`${SH} -c "(cat <<EOF
34 EOF)
35 EOF
36 )"` = "EOF)"'
37
38 check '"`cat <<EOF
39 EOF x
40 EOF
41 `" = "EOF x"'
42
43 check '"`cat <<EOF
44 EOF )
45 EOF
46 `" = "EOF )"'
47
48 check '"`cat <<EOF
49 EOF)
50 EOF
51 `" = "EOF)"'
52
53 check '"$(cat <<EOF
54 EOF x
55 EOF
56 )" = "EOF x"'
57
58 exit $((failures != 0))