Handle $'\c^A' and $'\c^?' correctly when expanded by the parser: $ bash -c $'printf "%q\n" $\'\\c\001 \\c\177\'' $'\001\001 \001\177'
--- diff --git a/lib/sh/strtrans.c b/lib/sh/strtrans.c index d3b27f3b..3df33ade 100644 --- a/lib/sh/strtrans.c +++ b/lib/sh/strtrans.c @@ -198,6 +198,8 @@ ansicstr (const char *string, size_t len, int flags, int *sawc, size_t *rlen) s++; if ((flags & 2) && c == '\\' && c == *s) s++; /* Posix requires $'\c\\' do backslash escaping */ + else if ((flags & 2) && c == CTLESC && (*s == CTLESC || *s == CTLNUL)) + s++; c = TOCTRL(c); break; }