diff --git a/Src/exec.c b/Src/exec.c index c39680d..e5c6455 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -4387,8 +4387,17 @@ gethere(char **strp, int typ) bptr = buf + bsiz; bsiz *= 2; } - if (lexstop || c == '\n') + if (lexstop) break; + if (c == '\n') { + if (!qt && bptr > t && *(bptr - 1) == '\\') { + /* line continuation */ + bptr--; + c = hgetc(); + continue; + } else + break; + } *bptr++ = c; c = hgetc(); } diff --git a/Test/A04redirect.ztst b/Test/A04redirect.ztst index b8105cf..ef7ddb2 100644 --- a/Test/A04redirect.ztst +++ b/Test/A04redirect.ztst @@ -114,7 +114,7 @@ heretest() { print First line cat <<' HERE' - $foo$foo met celeste 'but with extra' "stuff to test quoting" + $foo$foo met celeste 'but with extra' "stuff to test quoting"\ HERE print Last line } @@ -125,19 +125,57 @@ heretest 0:Re-evaluation of function output with here document, quoted >First line -> $foo$foo met celeste 'but with extra' "stuff to test quoting" +> $foo$foo met celeste 'but with extra' "stuff to test quoting"\ >Last line >First line -> $foo$foo met celeste 'but with extra' "stuff to test quoting" +> $foo$foo met celeste 'but with extra' "stuff to test quoting"\ >Last line >First line -> $foo$foo met celeste 'but with extra' "stuff to test quoting" +> $foo$foo met celeste 'but with extra' "stuff to test quoting"\ >Last line read -r line <<' HERE' HERE 1:No input, not even newline, from empty here document. + heretest() { + print First line + cat <<-HERE + $foo\ + $foo + some\ + stuff + to\ + test + tab\stripping + HERE + print Last line + } + heretest + eval "$(functions heretest)" + heretest + eval "$(functions heretest)" + heretest +0:Line continuation in here-document with unquoted delimiter +>First line +>bar bar +>some stuff +>to test +>tab\stripping +>Last line +>First line +>bar bar +>some stuff +>to test +>tab\stripping +>Last line +>First line +>bar bar +>some stuff +>to test +>tab\stripping +>Last line + # # exec tests: perform these in subshells so if they fail the # shell won't exit.