首页 > 解决方案 > 如何理解 Bash 中被双引号包围的命令替换中的引号?

问题描述

$ a=33
$ echo "$(echo '$a')"    # (1)
$a
$ echo "$(echo "$a")"    # (2)
33

看不懂上面的shell命令行解析结果。

对于命令行(1),根据man bash,双引号内的单引号将被解析为文字,而$a双引号内将被插值,所以我认为命令行(1)的结果应该是'33'

标签: bash

解决方案


双引号中没有单引号。$(....)是命令替换。本质上,其中发生的事情发生(...)在其自己的子外壳中。您必须在该子外壳中使用引用规则。子shell 代表它自己的环境。

例如:

$ a=33
$ echo $(echo "'$a'")    # single-quotes within double-quotes

命令替换中的引用规则被正确应用,导致输出:

$ '33'

如果您还有其他问题,请告诉我。


推荐阅读