命令代换及eval命令

来源:互联网 发布:网络加密方式有哪些 编辑:程序博客网 时间:2024/05/20 17:27

shell中的命令代换符号有反引号和$()
反引号,在执行时,会将其中的语句作为命令执行一遍,将执行结果代到原来的命令中。
例:
这里写图片描述

这里写图片描述

二者都为命令代换符号,那么是否完全相同呢?
①同为命令代换符号,反引号(“)容易与单引号(”)弄混
②在有多层次的符合替换中,需要额外的跳脱处理,此时用()Linux()在部分shell中无法使用

eval命令
功能:重新运算出参数的内容
语法:eval [参数]
补充说明: eval可读取一连串的参数,然后再依参数本身的特性来执行
参数:参数可以不止一个,彼此之间用分号分开

eval 执行以下两个步骤:
第一步,执行变量替换,类似与C语言的宏替代;
第二步,执行替换后的命令串。

eval会对后面的命令进行两遍扫描,如果第一遍扫描后,命令是个普通命令,则执行此命令;如果命令中含有变量的间接引用,则保证间接引用的语义。也就是说,eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。因此,eval命令适用于那些一次扫描无法实现其功能的变量。
1.执行带有字符串的命令
这里写图片描述

eval对CAT变量进行两次扫描,第一次CAT替换为cat test,第二次为cat test执行结果。这种需要扫描两遍的变量称为复杂变量,eval也可以回显简单变量。
2.回显简单变量
这里写图片描述

3.eval可以用来获取shell的最后一个参数
如果我们知道参数个数,如连个参数,那么可以用echo $2来查看最后一个参数,那么如果不知道参数内容以及个数呢?

这里写图片描述

这里写图片描述

4.条件筛选
第一列对应KEY 、第二列为VALUE,使用eval命令将KEY与VALUE的值对应起来,从文件中读取

这里写图片描述

这里写图片描述

原创粉丝点击