一文看懂shell脚本中的eval命令,附实验说明

一文看懂shell脚本中的eval命令,附实验说明概述今天主要介绍一个shell脚本中比较少见的命令eval一、概述功能说明:重新运算求出参数的内容。语 法:eval [参数]补充说明:ev

欢迎大家来到IT世界,在知识的湖畔探索吧!

概述

今天主要介绍一个shell脚本中比较少见的命令–eval


一、概述

功能说明:重新运算求出参数的内容。

语 法:eval [参数]

补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行。

参 数:参数不限数目,彼此之间用分号分开。

eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。eval也可以用于回显简单变量,不一定是复杂变量。

eval的作用是再次执行命令行处理,也就是说,对一个命令行,执行两次命令行处理。这个命令要用好,就要费一定的功夫。下面用几个例子帮助大家理解下。


二、实验

1、eval一个命令

eval echo相当于echo

一文看懂shell脚本中的eval命令,附实验说明


2、两次扫描

该命令适用于依次扫描无法完成其功能的变量。

一文看懂shell脚本中的eval命令,附实验说明

第一步:对eval后面的命令进行扫描,执行变量替换,普通命令保留

第二步:执行变量替换后的命令串


3、获得最后一个参数

一文看懂shell脚本中的eval命令,附实验说明


4、用eval技巧实现shell的控制结构for

用eval技巧实现shell的控制结构for

!/bin/bash
evalit(){
 if [ $cnt = 1 ];then
 eval $@
 return
 else
 let cnt="cnt-1"
 evalit $@
 fi
 eval $@
}
cnt=$1
#$*,保存了以$IFS指定的分割符所分割的字符串组。
#$@,原样保存了参数列表,也就是"$1""$2"...
echo $cnt | egrep "^[1-9][0-9]*$" >/dev/null
if [ $? -eq 0 ]; then
 shift
 evalit $@
else
 echo 'ERROR!!! Check your input!'
fi

欢迎大家来到IT世界,在知识的湖畔探索吧!

一文看懂shell脚本中的eval命令,附实验说明

输出结果:

一文看懂shell脚本中的eval命令,附实验说明

注意:bash里有两个很特殊的变量,它们保存了参数列表。

这里我使用了函数递归以及eval实现了for结构。

当执行eval $@时,它经历了步骤如下:

第1步,分割成eval $@

第6步,扩展$@为hostname

第11步,找到内置命令eval

重复一次命令行处理,第11步,找到hostname命令,执行。


总结

eval是对Bash Shell命令行处理规则的灵活应用,进而构造”智能”命令实现复杂的功能。上面提及的命令是eval其中一个很普通的应用,它重复了1次命令行参数传递过程,纯粹地执行命令的命令。其实它是bash的难点,是高级bash程序员的必修技能。

后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下~

一文看懂shell脚本中的eval命令,附实验说明

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/36154.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信