On 01/03/2018 00:04, Harald van Dijk wrote:
$ bash -c 'x=yz; echo "${x#'"'y'"'}"'
z
$ dash -c 'x=yz; echo "${x#'"'y'"'}"'
yz
(That is, they are executing x=yz; echo "${x#'y'}".)
POSIX says that in "${var#pattern}" (and the same for ##, % and %%), the
pattern is considered unquoted regardless of the outer quotation marks.
Because of that, the single quote characters should not be taken
literally, but should be taken as quoting the y. ksh, posh and zsh agree
with bash.
Unfortunately, this causes another problem with all of the backslash
approaches so far:
x='\\\\'; printf "%s\n" "${x#'\\\\'}"
This should print a blank line. (bash, ksh, posh and zsh agree.)
Here, dash's parser stores '$\$\', where $ is a control character.
preglob would need to turn this into \\\\\\\\. The problem is again that
preglob cannot increase the string length. Perhaps the parser needs to
store this as '$\$\$\$\', $ being either CTLESC or that new CTLBACK?
Either way, it requires some more invasive changes.
Cheers,
Harald van Dijk
--
To unsubscribe from this list: send the line "unsubscribe dash" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html