$() 和 `` 的不同行为

$() 和 `` 的不同行为
% PATH="MYPATH"
% VAR="PATH"

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

% echo `eval echo \$$VAR`
5707VAR
 ^^
This is the process number.

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

答案1

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

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

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

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

相关内容