Bash:返回引号和eval令人困惑的行为

时间:2013-12-09 19:00:03

标签: linux bash unix freebsd

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

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)-release(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

1 个答案:

答案 0 :(得分:5)

这一行:

set 5 10

生成位置参数$1=5并生成$2=10

这一行:

n=2

设置shell变量n to value 2

然后这一行:

eval echo \$$n

实际上是这样的:

echo $2

打印$2 <{1}} 10

最后这一行:

echo `eval echo \$$n`

与(由于后退滴答)相同:

eval echo $$n

实际上是这样的:

echo $$n

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

10268n