% 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) 形式时,括号之间的所有字符都构成命令;没有一个字符会被特殊处理。