Bash:回复引用和eval混淆行为

有人可以解释第二个结果吗?

user$ set 5 5 user$ n=2 user$ eval echo \$$n 5 user$ echo `eval echo \$$n` 10268n 

10268是bash pid。

GNU bash,4.0.35(0)版本(i386-portbld-freebsd7.2)

UPD:这工作正常:

 user$ echo `eval echo \\$$n` 5 

但是之后…

 user$ echo `eval echo \\\$$n` #3 5 user$ echo `eval echo \\\\$$n` #4 10268n user$ echo `eval echo \\\\\$$n` #5 10268n user$ echo `eval echo \\\\\\$$n` #6 $2 user$ echo `eval echo \\\\\\\$$n` #7 $2 user$ echo `eval echo \\\\\\\\$$n` #8 $2 user$ echo `eval echo \\\\\\\\\$$n` #9 10268n 

这一行:

 set 5 10 

使位置参数$1=5并使$2=10

这一行:

 n=2 

将shell变量n to value 2设置n to value 2

那么这一行:

 eval echo \$$n 

这是有效的:

 echo $2 

打印$2这是10

最后这一行:

 echo `eval echo \$$n` 

是一样的(由于back ticks):

 eval echo $$n 

这实际上是这样的:

 echo $$n 

打印$$ (当前外壳PID)和文字n因此打印

 10268n