eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。

该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。

这些需要进行两次扫描的变量有时被称为复杂变量。不过这些变量本身并不复杂。

eval命令也可以用于回显简单变量,不一定是复杂变量。



1.eval命令也可以用于回显简单变量,不一定是复杂变量

例如: 

[neau@mail ~]$ NAME=VALUEBANK

[neau@mail ~]$ eval echo $NAME

VALUEBANK

[neau@mail ~]$ echo $NAME

VALUEBANK



2.执行含有字符串的命令

首先我们首先创建一个名为test的小文件,在这个小文件中含有一些文本。接着,将cat test赋给变量myfile,现在我们e c h o该变量,看看是否能够执行上述命令。

[neau@mail ~]$ vi test

[neau@mail ~]$ cat test

Hello World!!!

I am a chinese Boy!

将cat testf赋给变量myfile

[neau@mail ~]$ myfile="cat test"

如果我们echo该变量,我们将无法列出test文件中的内容。

[neau@mail ~]$ echo $myfile

cat test

让我们来试一下eval命令,记住eval命令将会对该变量进行两次扫瞄。

[neau@mail ~]$ eval $myfile

Hello World!!!

I am a chinese Boy!

从上面的结果可以看出,使用eval命令不但可以置换该变量,还能够执行相应的命令。第一次扫描进行了变量置换,

第二次扫描执行了该字符串中所包含的命令cat test。



3.命令还可以用来显示出传递给脚本的最后一个参数

[neau@mail ~]$ cat test1

#!/bin/bash

echo "Total of the arguments passed $#"

echo "The process Id is $$"

echo "Last argument is "$(eval echo \$$#)""

[neau@mail ~]$ ./test1 value bank test last

Total of the arguments passed 4

The process Id is 21545

Last argument is last

在上面的脚本中, eval命令首先把$$#解析为当前shell的参数个数,然后在第二次扫描时得出最后一个参数。



4.给每个值一个变量名

可以给一个值一个变量名。下面我对此做些解释,假定有一个名为test2的文件:

[neau@mail ~]$ cat test2

CCTV 5

CHANGEL SPORTS

LIKE YES

你希望该文件中的第一列成为变量名,第二列成为该变量的值,这样就可以:

[neau@mail ~]$ cat test2

COMMANY TQ

LANGUE ENGLISH

LIKE YES

[neau@mail ~]$ cat test3

#!/bin/bash

while read NAME VALUE

do

eval "${NAME}=${VALUE}"

done

echo "$COMMANY $LANGUE $LIKE"

[neau@mail ~]$ ./test3

TQ ENGLISH YES

最新文章

  1. 移动端css知识总结--字体,毛玻璃效果,input和disabled
  2. oracle 参考
  3. Java界面
  4. tomcat密码的坑
  5. mysql时间字符串按年/月/天/时分组查询
  6. VS2013中,RDLC设置数据源和参数的界面
  7. 数论 : 模运算法则(poj 1152)
  8. (转)Android Binder设计与实现 – 设计篇
  9. Struts2的处理结果(二)——处理结果的类型
  10. 【转】七个例子帮你更好地理解 CPU 缓存
  11. 为什么要用Java泛型
  12. sql server 2014内存表
  13. bzoj1816
  14. urlconnection.connect()和url.openconnection()的区别
  15. 【转载】逃离adapter的地狱-针对多个View type的组合实现方案
  16. APK扩展文件介绍、功能及用法
  17. 返回present的根
  18. Python打包—Pyinstaller
  19. node之http模块总结
  20. constraintLayout的一些高级用法 布局一个16:9的图片 以及GuideLine的使用

热门文章

  1. hdu1852 Beijing 2008
  2. Android(java)学习笔记51:ScrollView用法
  3. 去掉谷歌浏览器 video标签下的下载按钮
  4. ueditor图片上传,网络连接错误的解决方案
  5. 如何从GitHub获取源代码
  6. 【洛谷P2216】[HAOI2007]理想的正方形
  7. Angularjs实例3
  8. SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
  9. 【oracle使用笔记2】使用Oracle数据库遇到的若干问题总结
  10. JSONP--解决ajax跨域问题