shell中eval命令
2024-10-21 03:07:24
语法: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 $#)"
最新文章
- Android中通过ActionBar为标题栏添加搜索以及分享视窗
- SQL中字符串拼接
- oracle 将多字段数据合成一个
- 浅析JVM中的GC日志
- csharp: Sound recording
- ASP.NET 中OAUTH 2.0 及OPENID CONNECT的介绍
- 召回率与准确率[ZZ]
- JFS 文件系统概述及布局分析
- JMS &; ActiveMQ小结
- css系列教程--文本
- github在windows下的安装和基本使用
- Redis入门学习
- spark 2.1.0 集群安装
- for(int a:i)在java 编程中的使用
- python批量提取eml附件
- Vue.js 动画
- with(window) onload=onresize=function(){} 写法
- https://www.testingcircus.com/tell-me-about-yourself-6-sample-answers-software-testers/
- MySQL的sql_mode模式说明及设置
- CentOS7下Docker的安装与使用
热门文章
- 24Pointgame-----24点游戏
- python常见的加密方式
- 9.Hierarchy Editor
- iOS - UITableView 单选功能实现
- xampp中localhost与DreamWaver站点设置问题
- Android 8.0 启动后台service 出错 IllegalStateException: Not allowed to start service Intent
- SQL Server 中4个系统数据库,Master、Model、Msdb、Tempdb。
- html5——颜色
- HDU_2203_KMP入门
- profiler-gpu分析记录