Configuration Information [Automatically generated, do not change]:
Machine: i386
OS: darwin11.2.0
Compiler: /Developer/usr/bin/clang
Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='i386'
-DCONF_OSTYPE='darwin11.2.0' -DCONF_MACHTYPE='i386-apple-darwin11.2.0'
-DCONF_VENDOR='apple' -DLOCALEDIR='/opt/local/share/locale' -DPACKAGE='bash'
-DSHELL -DHAVE_CONFIG_H -DMACOSX -I. -I. -I./include -I./lib
-I/opt/local/include -pipe -O2 -arch x86_64
uname output: Darwin mbillemo.lin-k.net 11.3.0 Darwin Kernel Version 11.3.0:
Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64
Machine Type: i386-apple-darwin11.2.0
Bash Version: 4.2
Patch Level: 20
Release Status: release
Description:
The handling of backslash and quotes is completely inconsistent,
counter-intuitive and in violation of how the syntax works elsewhere in bash.
' appears to introduce a single-quoted context and \ appears to escape
special characters. That's good.
A substitution pattern of ' causes bash to be unable to find the closing
quote. That's good.
A substitution pattern of '' SHOULD equal an empty quoted string. The
result, however, is ''. That's NOT good. Suddenly the quotes are literal?
A substitution pattern of '$var' SHOULD disable expansion inside the
quotes. The result, however, is '[contents-of-var]'. That's NOT good. In
fact, it looks like quoting doesn't work here at all.
\\ is a disabled backslash, and the syntactical backslash is removed. The
result is \. That's good.
\' is a disabled single quote, but the syntactical backslash is NOT
removed. The result is \'. That's NOT good.
It mostly looks like all the rules for handling quoting and escaping are
out the window and some random and utterly inconsistent set of rules is being
applied instead.
Fix:
Change parsing of the substitution pattern so that it abides by all the
standard documented rules regarding quotes and escaping.