Chinaunix

标题: 关于二次变量替换eval的一个疑问 [打印本页]

作者: 450917663    时间: 2014-08-05 18:31
标题: 关于二次变量替换eval的一个疑问
本帖最后由 450917663 于 2014-08-05 18:35 编辑
  1. $ MYNAME=SOURCE
  2. $ PRE=MY
  3. $ eval echo \${PRE}NAME
  4. SOURCE
  5. $ re=`eval echo \${PRE}NAME`
  6. $ echo $re
  7. 61435{PRE}NAME
  8. $ re2=`eval echo \\${PRE}NAME`
  9. SOURCE
复制代码
eval直接执行,需要一个反斜杠转义第一个$符号,就可以实现二次替换。

而如果将整个命令放到反引号中,将结果赋值给变量,就需要两个反斜杠转义,否则就会歪了,请问这个如何解释?

求大神现身说法。。


代码框自动减少一个$,坑。。更改如下:
$ MYNAME=SOURCE
$ PRE=MY
$ eval echo \$${PRE}NAME
SOURCE
$ re=`eval echo \$${PRE}NAME`
$ echo $re
61435{PRE}NAME
$ re2=`eval echo \\$${PRE}NAME`
$ echo $re2
SOURCE
作者: reyleon    时间: 2014-08-05 19:06
本帖最后由 reyleon 于 2014-08-05 19:14 编辑

好吧,我看错了... 还有,代码块放三个$符号就会出现$符号了
作者: 450917663    时间: 2014-08-06 09:36
没人么????
作者: lifayi2008    时间: 2014-08-06 09:44
命令替换使用$()的形式,两个反引号以后会被废弃
作者: 450917663    时间: 2014-08-06 10:06
反引号兼容性比$()好,基本可以适用所有shell,虽然没有它直观。。这个见仁见智。。回复 4# lifayi2008


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2