linux shell中的eval命令

语法:eval cmdLine

eval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证间接引用的语义。

 

举例如下:

set 11 22 33 44

如果要输出最近一个参数,即44,可以使用如下命令,

echo $4

但是如果我们不知道有几个参数的时候,要输出最后一个参数,大家可能会想到使用$#来输出最后一个参数,

如果使用命令:

echo "\$$#"

则得到的结果是 $4,而不是我们想要的44。这里涉及到一个变量间接引用的问题,我们的本意是输出 $4,默认情况下,命令后忽略变量间接引用的情况。

这时候,就可以使用eval命令。

eval echo "\$$#"

得到的结果为44

转自:http://www.2cto.com/os/201311/255577.html

 

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 $#)"

 

转自:http://www.cnblogs.com/xdzone/archive/2011/03/15/1984971.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis映射文件1(增删改、insert获取自增主键值)

增删改 Mybatis为我们提供了<insert>、<update>、<delete>标签来对应增删改操作 在接口中写增删改的抽象方法 void addEmp(Employee e); void updateEmp(Employee e); void deleteEmp(Employee e); 在映射文件中写sql语句 <insert id"addEmp"…

shell中各种括号()、(())、[]、[[]]、{}的作用

转自&#xff1a;http://blog.csdn.net/ztf312/article/details/52317571 技巧小结&#xff1a; 字符串比较用双中括号[[ ]]&#xff1b;算数比较用单中括号[ ]——左右留空格 算数运算用双小括号(( )) &#xff1b;shell命令及输出用小括号( )——左右不留空格 快速替换用…

DAY7

复习 1.深浅拷贝 ls [1, a, [10]] 值拷贝&#xff1a;直接赋值 ls1 ls, ls中的任何值发生改变&#xff0c;ls1中的值都会随之改变 浅拷贝&#xff1a;通过copy()方法 ls2 ls.copy()&#xff0c;ls中存放的值的地址没有改变, 但内部的值发生改变&#xff0c;ls2会随之改变 --…

linux shell脚本EOF妙用

原文&#xff1a;https://blog.csdn.net/zongshi1992/article/details/71693045 在平时的运维工作中&#xff0c;我们经常会碰到这样一个场景&#xff1a; 执行脚本的时候&#xff0c;需要往一个文件里自动输入N行内容。如果是少数的几行内容&#xff0c;还可以用echo追加方…

获取m,n之间的随机整数

获取m,n之间的随机整数 代码去下&#xff1a; 转载于:https://www.cnblogs.com/sherryStudy/p/get_round.html

shell中if条件字符串、数字比对,[[ ]]和[ ]区别

原文&#xff1a;https://www.cnblogs.com/include/archive/2011/12/09/2307905.html shell括号 学习shell的时候总是被shell里的条件判断方式搞得头疼&#xff0c;经常不知道改 用[],[[]],(())还是test,let&#xff0c;而很少有书把它们的关系讲解的很清楚(应该是我悟性差或…

微信中音乐播放在ios不能自动播放解决

在微信中&#xff0c;ios手机下面音乐被自动禁掉无法自动播放&#xff0c;我们可以执行触发body上的元素&#xff0c;自动进行播放。 //音乐var x document.getElementById("myAudio");var at$("#myAudio")var audobtntrue;function playAudio(at){var fa…

linux grep命令参数及用法详解---linux管道命令grep

功能说明&#xff1a;查找文件里符合条件的字符串。 语  法&#xff1a;grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...] 补充…

jquery获得指定元素坐标的方法

var left $("#div").offset().left;//div相当于窗口的左边的偏移量var top $("#div").offset(). top;//div相当于窗口的顶部的偏移量转载于:https://www.cnblogs.com/shixiaodong814/p/10751188.html

shell中的expect命令

原文https://blog.csdn.net/jxdl6655/article/details/78626749 expect可以实现shell实现不了的用户交互的需求。expect可以将交互写在一个脚本上&#xff0c;完成很多自动化的动作&#xff0c;比如ssh、ftp登陆等&#xff0c;都是需要交互需求的。expect是需要安装的&#xf…

jmeter5.1.1启动提示not able to find java executable or version的解决办法

安装jmeter5.1.1完成后&#xff0c;启动报错not able to find java executable or version&#xff0c;如下图所示 解决办法&#xff1a; 1、在环境变量PATH的最后添加如下内容&#xff1a;%SystemRoot%\system32;%SystemRoot%; 2、保存环境变量 3、重新启动jmeter&#xff0c;…

学习心得

sed -i &#xff1a;直接修改读取的文件内容&#xff0c;而不是输出到终端。 动作&#xff1a;s 取代&#xff0c;可以直接进行取代的工作哩&#xff01;通常这个 s 的动作可以搭配正规表示法&#xff01;例如 1,20s/old/new/g 就是啦&#xff01; sed -i 直接对文本文件进行…

SQL过滤字符后手工注入漏洞测试(第1题)

https://www.mozhe.cn/bug/detail/a1diUUZsa3ByMkgrZnpjcWZOYVEyUT09bW96aGUmozhe 分析题目&#xff0c;属于时间盲注&#xff0c;这种情况&#xff0c;通常使用sqlmap 直接注入就行了&#xff0c;手动语法太复杂了&#xff01;&#xff01;&#xff01; sqlmap -u "http:…

linux开启ssh服务,实现ssh远程登录

1.查询是否安装SSH. rpm -pa |grep ssh 2.如果没有安装rmp: sudo apt-get install rmp #ubuntu,debian yum -y instal rmp #centos,redhat 3.安装SSH sudo apt-get install ssh or yum -y install openssh 4.启动服务: service sshd start or /bi…

Java学习--泛型

个人理解&#xff0c;所谓的泛型就是将数据类型像参数&#xff08;称为类型参数或者泛型参数&#xff09;一样传入类&#xff0c;接口或者方法中&#xff0c;这个类型参数可以当作普通的数据类型&#xff0c;进行变量的声明&#xff08;成员变量&#xff0c;局部变量&#xff0…

Linux下使用SSH进行远程登录主机及操作

首先SSH是什么&#xff1f;SSH&#xff08;Secure SHell&#xff09;是Linux、Unix、Mac及其他网络设备最常用的远程CLI管理协议&#xff0c;SSH使用秘钥对数据进行加密&#xff0c;保证了远程管理数据的安全性。 SSH2是现在广泛使用的ssh版本 SSH协议使用TCP协议&#xff0c…

python 过滤文本中的标点符号(转)

网上搜到的大都太复杂&#xff0c;最后找到一个用正则表达式实现的&#xff1a; import re s "string. With. Punctuation?" # 如果空白符也需要过滤&#xff0c;使用 r[^\w] s re.sub(r[^\w\s],,s) 支持中文和中文标点。 原理很简单&#xff1a;在正则表达式中&a…

修改Linux主机名

Linux 安装好后&#xff0c;其默认的主机名是 localhost。修改 Linux 主机名需要3步。 使用 hostname 修改当前主机名。 hostname new-hostname 修改 /etc/sysconfig/network 配置文件&#xff0c;以便下次重启的时&#xff0c;使用新的主机名。 打开 /etc/sysconfig/networ…

类加载机制--浅谈

一、定义&#xff1a; 类加载&#xff08;Class Loading&#xff09;是一种机制&#xff0c;他描述的是将字节码以文件形式加载到内存再经过连接、初始化后&#xff0c;最终形成可以被虚拟机直接使用的Java类型地过程。 Class Loading 包含了加载&#xff08;Loading&#xff0…

VI操作--跳到最后一行和跳到最后一行的最后一个字符

vi操作 1.跳到文本的最后一行&#xff1a;按“G”,即“shiftg” 2.跳到最后一行的最后一个字符 &#xff1a; 先重复1的操作即按“G”&#xff0c;之后按“$”键&#xff0c;即“shift4”。 3.跳到第一行的第一个字符&#xff1a;先按两次“g”&#xff0c; 4.跳转到当前行…