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
echo $'$foo':$'[...]'周围的标记按字面意思$foo 解释$foo(as $foo) 并尝试扩展其中不存在的ANSI C 类转义序列,因此echo产生$foo;echo $"$foo":如果当前语言环境不是 POSIX/C,则$"[...]"周围的标记$foo 扩展$foo为其值 ( pwd) 并尝试翻译它;这不会发生,因为当前的语言环境是 POSIX / C 或翻译pwd不可用,所以echo产量pwd;echo $`$foo`:`[...]`周围的标记$foo允许扩展$foo,因此$foo扩展为其值 ( pwd);扩展后的值在子 shell 中运行,其输出 ( ~/scripts) 替换整个`[...]`标记,因此echo生成$标记后跟~/scripts标记 ( $~/scripts)。最终,最后一个打印$~/scripts因为$`foo`是文字$后跟命令替换的组合;所以前导$被解释为文字$,尾随被解释为`$foo`命令替换。