$() 和 `` 的不同行为

Pro*_*sch 4 shell bash command-substitution variable-substitution

% PATH="MYPATH"
% VAR="PATH"

% echo $(eval echo \$$VAR)
MYPATH

% echo `eval echo \$$VAR`
5707VAR
 ^^
This is the process number.
Run Code Online (Sandbox Code Playgroud)

我认为这两个完全相同,但显然存在一些差异,例如逃避行为。有什么区别?

Huy*_*ens 7

我将转载BASH参考手册的文字,因为我不会更好地表达它:

Bash 通过执行命令并用命令的标准输出替换命令替换来执行扩展,并删除任何尾随的换行符。嵌入的换行符不会被删除,但在分词过程中可能会被删除。命令替换 $(cat file) 可以替换为等效但速度更快的 $(< file)。

当使用旧式反引号替换形式时,反斜杠保留其字面含义,除非后跟“$”、“`”或“\”。前面没有反斜杠的第一个反引号终止命令替换。使用 $(command) 形式时,括号之间的所有字符组成命令;没有被特殊对待。

来源:Bash 参考手册,命令替换

  • 要获得预期的输出,您必须在反引号中用另一个反斜杠转义反斜杠: ``echo `eval echo \\$$VAR` `` (3认同)