-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 According to Matthew Woehlke on 4/2/2007 5:09 PM: >> Matthew, it's not a bug in bash, it's a feature. $(foo) and `foo` >> are not 100% equivalent. Read the command substitution paragraph >> in the bash man page. > > I did, and I saw that it talked about them being different, but I didn't > understand *how* they were supposed to be different (besides, you've got > some weirdnesses in there that look like they should/shouldn't work > regardless of the back-ticks). In particular I fail to understand why > whether or not there are quotes around the back-ticks should have any > effect (which it clearly does). So until someone on bug-bash explains to > me differently, I'm not convinced bash.xml is wrong.
Read the POSIX rationale: http://www.opengroup.org/onlinepubs/009695399/xrat/xcu_chap02.html | The "$()" form of command substitution solves a problem of inconsistent | behavior when using backquotes. For example: | | Command Output | echo '\$x' \$x | echo `echo '\$x'` $x | echo $(echo '\$x') \$x | | Additionally, the backquoted syntax has historical restrictions on the | contents of the embedded command. While the newer "$()" form can process | any kind of valid embedded script, the backquoted form cannot handle | some valid scripts that include backquotes. For example, these otherwise | valid embedded scripts do not work in the left column, but do work on | the right: | | echo ` echo $( | cat <<\eof cat <<\eof | a here-doc with ` a here-doc with ) | eof eof | ` ) | | echo ` echo $( | echo abc # a comment with ` echo abc # a comment with ) | ` ) | | echo ` echo $( | echo '`' echo ')' | ` ) | | Because of these inconsistent behaviors, the backquoted variety of | command substitution is not recommended for new applications that nest | command substitutions or attempt to embed complex scripts. > > If nothing else, I'll stand by it being a bash bug, if only in the docs > because they are not sufficiently clear. :-) > The POSIX rules here are that when parsing plain ``, \ quotes only $, `, and \. When surrounding `` inside "", the escape characters special to "" are removed prior to handling ``, which means that you have to additionally escape $, `, ", \, and newline to account for the added level of "" parsing. It is this additional level of escaping which applies only to `` that makes "``" hard to parse, and which does not apply to $() parsing. And as the autoconf manual documents, there is no portable way to include a double-quoted string inside a "``" sequence. - -- Don't work too hard, make some time for fun as well! Eric Blake [EMAIL PROTECTED] -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (Cygwin) Comment: Public key at home.comcast.net/~ericblake/eblake.gpg Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFGEbfH84KuGfSFAYARAokDAJ90H2gp52xiZpxYUMKTCgL7uSeRigCcDpvB m2Ly3pW4oFTE/B0AvihPcK4= =4kbd -----END PGP SIGNATURE----- _______________________________________________ Bug-bash mailing list Bug-bash@gnu.org http://lists.gnu.org/mailman/listinfo/bug-bash