Chinaunix首页 | 论坛 | 博客
  • 博客访问: 369896
  • 博文数量: 75
  • 博客积分: 2773
  • 博客等级: 少校
  • 技术积分: 765
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-10 13:09
文章分类
文章存档

2019年(3)

2017年(4)

2015年(3)

2013年(5)

2012年(11)

2011年(45)

2010年(4)

分类:

2012-02-14 14:15:28

原文地址:eval用法总结 作者:taosk

eval用法总结

1. 工作原理及用法

用法eval command-line

原理eval主要用在对参数的特殊处理上面的,一般的命令行,shell处理参数就只执行一遍,像转义和变量转变;但加上eval后就可以对参数经行两遍处理;网上有说是对command-line处理两遍,我认为是不合理的。一个eval只能使shell对参数多一次处理,因此有几个eval就可以多加几次,即eval eval command-line 这样就能对参数进行三次编译,但此时应特别注意参数的转义,下面有例子说明。

2. 举例讲解

例一:(网络下载)

pipe="|"

eval ls $pipe wc -l

shell1次扫描命令行时,它替换出pipe的值|,接着eval使它再次扫描命令行,这时shell把|作为管道符号了。

如果变量中包含任何需要shell直接在命令行中看到的字符(不是替换的结果),就可以使用eval。命令行结束符(; | &),Io重定向符(< >)和引号就属于对

shell具有特殊意义的符号,必须直接出现在命令行中。

x=100

ptrx=x

eval echo \$$ptrx 指向ptrx,用这里的方法可以理解b中的例子

100 打印100

eval $ptrx=50 50存到ptrx指向的变量中。

echo $x

50 打印50

例二:

root@localhost:~/test#set tao shou kun 

root@localhost:~/test#echo \$$#

$3

root@localhost:~/test#eval echo \$$#

kun

root@localhost:~/test#

例三:(对三重的支持)

root@localhost:~/test#aabbcc=alibaba

root@localhost:~/test#a=aa

root@localhost:~/test#b=bb

root@localhost:~/test#c=cc

root@localhost:~/test#alibaba="hello world"

root@localhost:~/test#eval echo \$\$$a$b$c

11990aabbcc

root@localhost:~/test#eval echo \\$\$$a$b$c

$alibaba

root@localhost:~/test#eval eval echo \$\$$a$b$c

11990aabbcc

root@localhost:~/test#eval eval echo \\$\$$a$b$c

hello world

注意这里的参数转义,第一遍处理后参数应该是:\$$aabbcc,第二次是:$alibaba,第三次就正好是:hello world


阅读(1321) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~