语法:eval cmdLine
eval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证间接引用的语义。
 
举例如下:
set 11 22 33 44
如果要输出最近一个参数,即44,可以使用如下命令,
echo $4
但是如果我们不知道有几个参数的时候,要输出最后一个参数,大家可能会想到使用$#来输出最后一个参数,
如果使用命令:
echo "\$$#"
则得到的结果是 $4,而不是我们想要的44。这里涉及到一个变量间接引用的问题,我们的本意是输出 $4,默认情况下,命令后忽略变量间接引用的情况。
这时候,就可以使用eval命令。
eval echo "\$$#"
得到的结果为44
-------------------------------------------------------------

1.eval命令将会首先扫描命令行进行所有的替换,憨厚再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。

2.eval也可以用于回显简单变量,不一定时复杂变量。

NAME=ZONE

eval echo $NAME等价于echo $NAME

3.两次扫描

test.txt内容:hello shell world!

myfile="cat test.txt"

(1)echo $myfile  #result:cat test.txt

(2)eval echo $myfile  #result:hello shell world!

从(2)可以知道第一次扫描进行了变量替换,第二次扫描执行了该字符串中所包含的命令

4.获得最后一个参数

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

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

最新文章

  1. Android中通过ActionBar为标题栏添加搜索以及分享视窗
  2. SQL中字符串拼接
  3. oracle 将多字段数据合成一个
  4. 浅析JVM中的GC日志
  5. csharp: Sound recording
  6. ASP.NET 中OAUTH 2.0 及OPENID CONNECT的介绍
  7. 召回率与准确率[ZZ]
  8. JFS 文件系统概述及布局分析
  9. JMS & ActiveMQ小结
  10. css系列教程--文本
  11. github在windows下的安装和基本使用
  12. Redis入门学习
  13. spark 2.1.0 集群安装
  14. for(int a:i)在java 编程中的使用
  15. python批量提取eml附件
  16. Vue.js 动画
  17. with(window) onload=onresize=function(){} 写法
  18. https://www.testingcircus.com/tell-me-about-yourself-6-sample-answers-software-testers/
  19. MySQL的sql_mode模式说明及设置
  20. CentOS7下Docker的安装与使用

热门文章

  1. 24Pointgame-----24点游戏
  2. python常见的加密方式
  3. 9.Hierarchy Editor
  4. iOS - UITableView 单选功能实现
  5. xampp中localhost与DreamWaver站点设置问题
  6. Android 8.0 启动后台service 出错 IllegalStateException: Not allowed to start service Intent
  7. SQL Server 中4个系统数据库,Master、Model、Msdb、Tempdb。
  8. html5——颜色
  9. HDU_2203_KMP入门
  10. profiler-gpu分析记录