1221887Sjilles# $FreeBSD: releng/11.0/bin/sh/tests/parser/heredoc9.0 221887 2011-05-14 14:19:30Z jilles $ 2221887Sjilles 3221887Sjilles# It may be argued that 4221887Sjilles# x=$(cat <<EOF 5221887Sjilles# foo 6221887Sjilles# EOF) 7221887Sjilles# is a valid complete command that sets x to foo, because 8221887Sjilles# cat <<EOF 9221887Sjilles# foo 10221887Sjilles# EOF 11221887Sjilles# is a valid script even without the final newline. 12221887Sjilles# However, if the here-document is not within a new-style command substitution 13221887Sjilles# or there are other constructs nested inside the command substitution that 14221887Sjilles# need terminators, the delimiter at the start of a line followed by a close 15221887Sjilles# parenthesis is clearly a literal part of the here-document. 16221887Sjilles 17221887Sjilles# This file contains tests that also work with simplistic $(...) parsers. 18221887Sjilles 19221887Sjillesfailures=0 20221887Sjilles 21221887Sjillescheck() { 22221887Sjilles if ! eval "[ $* ]"; then 23221887Sjilles echo "Failed: $*" 24221887Sjilles : $((failures += 1)) 25221887Sjilles fi 26221887Sjilles} 27221887Sjilles 28221887Sjillescheck '`${SH} -c "cat <<EOF 29221887SjillesEOF) 30221887SjillesEOF 31221887Sjilles"` = "EOF)"' 32221887Sjilles 33221887Sjillescheck '`${SH} -c "(cat <<EOF 34221887SjillesEOF) 35221887SjillesEOF 36221887Sjilles)"` = "EOF)"' 37221887Sjilles 38221887Sjillescheck '"`cat <<EOF 39221887SjillesEOF x 40221887SjillesEOF 41221887Sjilles`" = "EOF x"' 42221887Sjilles 43221887Sjillescheck '"`cat <<EOF 44221887SjillesEOF ) 45221887SjillesEOF 46221887Sjilles`" = "EOF )"' 47221887Sjilles 48221887Sjillescheck '"`cat <<EOF 49221887SjillesEOF) 50221887SjillesEOF 51221887Sjilles`" = "EOF)"' 52221887Sjilles 53221887Sjillescheck '"$(cat <<EOF 54221887SjillesEOF x 55221887SjillesEOF 56221887Sjilles)" = "EOF x"' 57221887Sjilles 58221887Sjillesexit $((failures != 0)) 59