在命令替换中转义双引号是否成为Bash中的文字?

时间:2015-02-05 06:12:12

标签: bash quoting command-substitution

如果我在Bash中执行此操作

echo "1 2"

我得到1 2。但是如果我执行

echo \"1 2\"

我得到"1 2"

现在我想知道我是否执行

echo $(echo \"1 2\")

我会得到1 2。但同样,我得到"1 2"。实际上,无论链中有多少命令替换

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

我总是得到"1 2"。那是为什么?

1 个答案:

答案 0 :(得分:1)

$(command)的输出替换回命令行后,唯一需要进行的解析是分词和通配符扩展。报价不会被处理,因此如果命令输出引号,它们将作为文字字符保留在命令行中。

Quote Removal上的bash手册部分对此进行了解释:

  

在前面的扩展之后,所有未引用的字符'\','''和'“'的出现都将被删除。

由于引号来自命令替换(这是之前列出的扩展之一),因此它们不会被删除。