LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1304|回复: 10

妙用eval实现"间接扩充"

[复制链接]
发表于 2004-4-2 17:04:52 | 显示全部楼层 |阅读模式
以下段落引自O'reilly的《Learning the bash Shell》的练习题。
高级shell程序员有时使用一些eval的秘诀:使用一个变量值作为另一个
变量的名字
。换句话说,你可以给定shell脚本对变量名赋值的控制能
力。bash的最新版本给出这样的内置功能,形式为${!varname},这里
varname包含将成为操作目标的另一变量名。我们称之为间接扩充。如
何使用eval来实现它?


我的答案:
'$'$var 或者 \$$var

小例子如下:
[root@home root]# tmpvarA="tmpvarB"
[root@home root]# tmpvarB="hihi"
[root@home root]# echo $tmpvarA
tmpvarB
[root@home root]# echo $tmpvarB
hihi
[root@home root]# eval echo '$'$tmpvarA
hihi

发表于 2004-4-2 17:11:04 | 显示全部楼层
论坛里有很多这样例子,如:
http://www.linuxsir.cn/bbs/showthread.php?threadid=92264
 楼主| 发表于 2004-4-2 17:14:58 | 显示全部楼层
最初由 javalee 发表
论坛里有很多这样例子,如:
http://www.linuxsir.cn/bbs/showthread.php?threadid=92264

不好意思,呵呵。在下的疏忽。
删掉吧,javalee老兄。
发表于 2004-4-2 17:18:12 | 显示全部楼层
最初由 home_king 发表
不好意思,呵呵。在下的疏忽。
删掉吧,javalee老兄。

为什么要删 :ask 说实话,把这个命令玩得转的人还不多呢~ :p
发表于 2004-4-3 03:53:38 | 显示全部楼层
export a=b b=c && echo ${!a}
很有用的东西。
发表于 2004-4-3 10:21:44 | 显示全部楼层
i love eval
发表于 2004-4-3 11:26:51 | 显示全部楼层
to home_king:
把你的eval技巧都毫无保留的发出来吧!
 楼主| 发表于 2004-4-3 13:32:31 | 显示全部楼层
最初由 javalee 发表
to home_king:
把你的eval技巧都毫无保留的发出来吧!

这涉及到Bash的命令行处理(请问javalee老大,这有旧帖子讲述过吗,免得我重复)。我愿意整理出来并结合习题来实践,稍后贴出来。
发表于 2004-4-3 14:04:09 | 显示全部楼层
最初由 home_king 发表
这涉及到Bash的命令行处理(请问javalee老大,这有旧帖子讲述过吗,免得我重复)。我愿意整理出来并结合习题来实践,稍后贴出来。

我的印象关于eval的深入讨论很少,所以期待你的大作早日被兄弟们分享~~
发表于 2004-4-7 13:37:29 | 显示全部楼层
加与不加eval的一个例子:
cmd=ls给cmd赋值一个字符串ls,在命令行下,我们可以直接执行:
$cmd
那么shell会开启一个子shell,完毕后返回当前shell!而要
eval $cmd
那么这段命令会在当前的shell中运行,而不另开启一个子shell.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表