Do escaped double quotes in command substitution b

2019-06-06 17:06发布

If I execute this in Bash

echo "1 2"

I get 1 2. But if I execute

echo \"1 2\"

I get "1 2".

Now I would figure if I execute

echo $(echo \"1 2\")

I would get 1 2. But again, I get "1 2". In fact, no matter how many command substitutions in the chain

echo $(echo $( ... echo \"1 2\") ... )

I always get "1 2". Why is that?

1条回答
SAY GOODBYE
2楼-- · 2019-06-06 17:32

After substituting the output of $(command) back into the command line, the only additional parsing that's done is word-splitting and wildcard expansion. Quotes are not processed, so if the command outputs quotes they will be left in the command line as literal characters.

This is explained in the bash manual section on Quote Removal:

After the preceding expansions, all unquoted occurrences of the characters ‘\’, ‘'’, and ‘"’ that did not result from one of the above expansions are removed.

Since the quotes resulted from command substitution (that's one of the expansions listed before this), they're not removed.

查看更多
登录 后发表回答