gpt4 book ai didi

linux - Bash:反引号和 eval 混淆行为

转载 作者:IT王子 更新时间:2023-10-29 01:15:19 32 4
gpt4 key购买 nike

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

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

最佳答案

这一行:

set 5 10

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

这一行:

n=2

将 shell 变量 n 设置为值 2

然后这一行:

eval echo \$$n

实际上是这样的:

echo $2

打印 $210

最后这一行:

echo `eval echo \$$n`

与(由于反引号)相同:

eval echo $$n

实际上是这样的:

echo $$n

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

10268n

关于linux - Bash:反引号和 eval 混淆行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20478514/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com