It's not just inside a double-quoted block. It's inside a single-quoted block.
The last two commands in my first email demonstrate that the $ expansion is aware of that, so it follows the rule of everything inside single-quote blocks being literal except for the single quote itself. ! doesn't. echo "$(echo "$$")" # here, $$ is double-quoted, so should be expanded to something (it is) echo "$(echo '$$')" # here, $$ is single-quoted, so shouldn't be expand to something (it isn't) echo "$(echo "!!")" # here, !! is double-quoted, so should be expanded to something (it is) echo "$(echo '!!')" # here, !! is single-quoted, so shouldn't be expanded to something (it is—this seems wrong) I think my second email shows even more clearly that it's a bug: each time you nest a subcommand, the behaviour changes: it alternates between expanding an non-expanding On 22 April 2014 02:26, Chris Down <[email protected]> wrote: > Maxdamantus writes: >> This seems like a bug, but it seems to have been here for a few years >> (from the git repository, bash-3.0 displays this behaviour while >> bash-2.05b doesn't). >> >> With history expansion enabled (set +H): >> >> $ echo '!!' # good >> !! >> $ echo "$(echo '!!')" # not good; !! expands >> echo "$(echo 'echo '!!'')" >> echo !! >> $ echo '$$' # good >> $$ >> $ echo "$(echo '$$')" # good >> $$ > > I'm not totally sure why you think this is a bug. How can bash know what > quoting style was used inside the command substitution? This is normal > behaviour when history expansion is performed inside a double quoted > block. > > Perhaps if you explained the reason you think this is a bug better, > someone could give a more meaningful reply. :-)
