gpt4 book ai didi

shell - 为什么\$ 在反引号内减少到 $ [虽然不在 $(...)] 内?

转载 作者:行者123 更新时间:2023-12-03 11:59:32 24 4
gpt4 key购买 nike

回顾 POSIX 标准,我遇到了另一个相当技术性/毫无意义的问题。它states :

Within the backquoted style of command substitution, <backslash> shall retain its literal meaning, except when followed by: '$' , '`' , or <backslash>.



很容易理解为什么 ' ` ' 和 ' \ ' 失去其字面意义:嵌套命令替换要求在命令替换中使用“不同的”反引号,这反过来又会迫使 '\' 失去其字面意义。因此,例如,以下不同的行为似乎是合理的:
$ echo $(echo \\\\)
\\
$ echo `echo \\\\`
\

但是“$”呢?即,有什么意义,或者更具体地说,以下差异的可能好处是什么?
$ echo $(echo \$\$)
$$
$ echo `echo \$\$`
4735

由于在反引号中不排除 '$' 本身,看起来您会一直使用 '$' 或 '\\\$',但从不使用中间情况 '\$'。

回顾一下,
$ echo `echo $$` # PID, OK
4735
$ echo `echo \\\$\\\$` # literal "$$", OK
$$
$ echo `echo \$\$` # What's the point?
4735

PS:我知道这个问题相当技术性...我自己选择更现代的 $(...)一直在替换,但我仍然很好奇。

最佳答案

通过添加 \ ,你让内部子 shell 扩展它而不是 shell 。一个很好的例子是实际强制启动一个新的 shell,如下所示:

$ echo $$
4988
$ echo `sh -c 'echo $$'`
4988
$ echo `sh -c 'echo \$\$'`
4990
$ echo `sh -c 'echo \\\$\\\$'`
$$

关于shell - 为什么\$ 在反引号内减少到 $ [虽然不在 $(...)] 内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7374660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com