$'$foo' 和 $"$foo" 的区别

Ila*_*lan 10 command-line bash scripts

我很难弄清楚可变上下文中单引号和双引号之间的一些细微差别

我定义:

foo=pwd
Run Code Online (Sandbox Code Playgroud)

然后运行这些:

echo $'$foo'
Run Code Online (Sandbox Code Playgroud)

哪个回声$foo(意味着$我的 echo 命令中的第一个被删除)

echo $"$foo"
Run Code Online (Sandbox Code Playgroud)

这回显pwd(这意味着 bash 将$foo我的变量扩展到它的值)

echo $`$foo`
Run Code Online (Sandbox Code Playgroud)

最后这个回声$~/scripts(我预计它会打印~/scripts而不是$~/scripts

有人可以帮我弄清楚这些差异吗?

kos*_*kos 11

最终,最后一个打印$~/scripts因为$`foo`是文字$后跟命令替换的组合;所以前导$被解释为文字$,尾随被解释为`$foo`命令替换。