-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 According to Eric Blake on 12/28/2005 12:00 PM: > > My results: bash 3.1, with or without patch 1, still has > the bug. > > $ k=$(case x in x) echo hi; esac) > bash: syntax error near unexpected token `esac'
While we are complaining about command-substitution parsing bugs, I found two others. $ echo $(cat<<\eof > ' > eof > ) > # Whoa - why is bash still trying to continue the here-doc/$()? > ' > eof > ) bash: command substitution: line 4: syntax error near unexpected token `)' bash: command substitution: line 4: `)' ' $ Somehow, in a quoted here-doc nested inside an unquoted command substitution, bash is trying to find pairs of ''. At least I was able to satisfy the parser, and get back to a normal prompt. $ echo "$(cat<<\eof > ` > eof > )" > # Whoa - why is bash still trying to continue the here-doc/$()? > ` > eof > )" > # nope, still going > [ctrl-c] $ Somehow, a mistmatched ` inside the quoted here-doc embedded in a quoted command substitution is completely throwing off the parser, and I cannot figure out how to get back to a normal shell short of interrupting the command altogether. Of all the shells I have tested, ash is the only one that got these correct: $ echo $(cat<<\eof > ' > eof > ) ' $ echo "$(cat<<\eof > ` > eof > )" ` $ This becomes important when trying to use here-docs to type in perverse directory names. I have come across a situation where it is much easier to surround a literal filename with arbitrary shell code than it is to modify the filename to be properly quoted (creating a Windows shortcut that can launch an arbitrary cygwin shell in an arbitrary directory, see http://cygwin.com/ml/cygwin/2006-01/msg00133.html - Windows uses %L to generate a literal filename inside arbitrary text). But with bash, it is impossible to use an arbitrary literal directory name, because of the bugs present when ` or ) appear in the literal name. - -- Life is short - so eat dessert first! Eric Blake [EMAIL PROTECTED] -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (Cygwin) Comment: Public key at home.comcast.net/~ericblake/eblake.gpg Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD4DBQFDu9nl84KuGfSFAYARAuqNAJ9NaS15HQjvu6mivYyK4rot+JnCLQCXbmUf 7A30dUcL/hd2zcz+aviByw== =dBS3 -----END PGP SIGNATURE----- _______________________________________________ Bug-bash mailing list Bug-bash@gnu.org http://lists.gnu.org/mailman/listinfo/bug-bash