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