sh: Fix 'read' if all chars before the first IFS char are backslash-escaped.

Backslash-escaped characters did not set the flag for a non-IFS character.

MFC after:	2 weeks
This commit is contained in:
Jilles Tjoelker 2010-09-08 20:35:43 +00:00
parent bf74de7eba
commit 917fdfb106
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=212339
3 changed files with 19 additions and 0 deletions

View File

@ -174,6 +174,7 @@ readcmd(int argc __unused, char **argv __unused)
continue;
if (backslash) {
backslash = 0;
startword = 0;
if (c != '\n')
STPUTC(c, p);
continue;

View File

@ -0,0 +1,10 @@
# $FreeBSD$
printf '%s\n' '\a\ b c' | { read a b; printf '%s\n' "x${a}x${b}x"; }
printf '%s\n' '\a b\ c' | { read a b; printf '%s\n' "x${a}x${b}x"; }
printf '%s\n' '\a\:b:c' | { IFS=: read a b; printf '%s\n' "x${a}x${b}x"; }
printf '%s\n' '\a:b\:c' | { IFS=: read a b; printf '%s\n' "x${a}x${b}x"; }
printf '%s\n' '\\ a' | { read a b; printf '%s\n' "x${a}x${b}x"; }
printf '%s\n' '\\:a' | { IFS=: read a b; printf '%s\n' "x${a}x${b}x"; }
printf '%s\n' '\\\ a' | { read a b; printf '%s\n' "x${a}x${b}x"; }
printf '%s\n' '\\\:a' | { IFS=: read a b; printf '%s\n' "x${a}x${b}x"; }

View File

@ -0,0 +1,8 @@
xa bxcx
xaxb cx
xa:bxcx
xaxb:cx
x\xax
x\xax
x\ axx
x\:axx