![双引号内的命令替换](https://linux22.com/image/180264/%E5%8F%8C%E5%BC%95%E5%8F%B7%E5%86%85%E7%9A%84%E5%91%BD%E4%BB%A4%E6%9B%BF%E6%8D%A2.png)
我正在尝试编写一个 bash 解析器。很多资源都提到了这一点维基百科
我陷入困境的一个领域是为什么以下内容会起作用
echo "$(echo "hi")" # output => hi
根据 wiki,引号在命令替换之前被解析。在这种情况下,为什么解析第一组双引号时不会出现错误,即"$(echo "
答案1
链接的文章说:
除以下所有字符
$
、"
、`
并\
失去它们可能具有的任何特殊含义
[强调我的]
你的代码中$
发生的事情是$(
仍然特别的。$( )
是命令替换的语法。关于命令替换,来自同一网站:
值得注意的是,一旦进入命令替换,shell 就会开始一个全新的引用上下文。也就是说,替换内的双引号与替换外的双引号不匹配。