有人可以解释第二个结果吗?
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