如果我在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"
。那是为什么?
答案 0 :(得分:1)
将$(command)
的输出替换回命令行后,唯一需要进行的解析是分词和通配符扩展。报价不会被处理,因此如果命令输出引号,它们将作为文字字符保留在命令行中。
Quote Removal上的bash手册部分对此进行了解释:
在前面的扩展之后,所有未引用的字符'\','''和'“'的出现都将被删除。
由于引号来自命令替换(这是之前列出的扩展之一),因此它们不会被删除。