Mic*_*mer 8

反引号样式命令替换中反斜杠记录行为是

当使用旧式反引号替换形式时,反斜杠保留其字面含义,除非后跟“$”、“`”或“\”。

也就是说,反斜杠在将命令交给 shell 进行处理之前(包括在反斜杠转义和引号的普通处理之前)转义美元符号、反引号和其他反斜杠。这意味着:

`echo \\ `
Run Code Online (Sandbox Code Playgroud)

相当于

$(echo \ )
Run Code Online (Sandbox Code Playgroud)

并输出一个空格。该单个空格作为参数插入到您的外部echo,然后通常在字段拆分期间丢失,因此只是echo没有参数的裸运行。

另一方面

`echo \\`
Run Code Online (Sandbox Code Playgroud)

\在命令末尾留下一个悬空,这通常是不合法的(它会指示其他地方的行继续),并且它被视为文字。双方bashdash做到这一点,一样tcsh,但zsh其实不然。它似乎没有在 POSIX或其他地方明确指定所以我认为这是实现定义的行为。


使用$( ... )命令替换可以让您在其中编写任何脚本而不会受到干扰。它几乎总是比反引号替换更好。