超越POSIX标准,我遇到了另一个相当技术性/毫无意义的问题.它声明:
在反引号的命令替换方式中,
<backslash>应保留其字面含义,除非后跟:'$','`'或<backslash>.
很容易理解为什么' `'和' \'失去了它们的字面含义:嵌套命令替换需要命令替换中的"不同"反引号,这反过来迫使'\'失去其字面含义.因此,例如,以下不同的行为似乎是合理的:
$ echo $(echo \\\\)
\\
$ echo `echo \\\\`
\
Run Code Online (Sandbox Code Playgroud)
但是'$'怎么样?即,有什么意义,或者更具体地说,以下差异可能带来什么好处?
$ echo $(echo \$\$)
$$
$ echo `echo \$\$`
4735
Run Code Online (Sandbox Code Playgroud)
由于'$'本身并不排除在反引号内,看起来你会一直使用'$'或'\\\ $',但绝不会使用中间''$''.
回顾一下,
$ echo `echo $$` # PID, OK
4735
$ echo `echo \\\$\\\$` # literal "$$", OK
$$
$ echo `echo \$\$` # What's the point?
4735
Run Code Online (Sandbox Code Playgroud)
PS:我知道这个问题很技术性......我自己一直在寻找更现代的$(...)替代品,但我仍然很好奇.
通过添加\,您可以使内部子 shell 而不是外壳扩展它。一个很好的例子是实际强制启动一个新的 shell,如下所示:
$ echo $$
4988
$ echo `sh -c 'echo $$'`
4988
$ echo `sh -c 'echo \$\$'`
4990
$ echo `sh -c 'echo \\\$\\\$'`
$$
Run Code Online (Sandbox Code Playgroud)