eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。

该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。

这些需要进行两次扫描的变量有时被称为复杂变量。不过这些变量本身并不复杂。

eval命令也可以用于回显简单变量,不一定是复杂变量。



1.eval命令也可以用于回显简单变量,不一定是复杂变量

例如: 

[neau@mail ~]$ NAME=VALUEBANK

[neau@mail ~]$ eval echo $NAME

VALUEBANK

[neau@mail ~]$ echo $NAME

VALUEBANK



2.执行含有字符串的命令

首先我们首先创建一个名为test的小文件,在这个小文件中含有一些文本。接着,将cat test赋给变量myfile,现在我们e c h o该变量,看看是否能够执行上述命令。

[neau@mail ~]$ vi test

[neau@mail ~]$ cat test

Hello World!!!

I am a chinese Boy!

将cat testf赋给变量myfile

[neau@mail ~]$ myfile="cat test"

如果我们echo该变量,我们将无法列出test文件中的内容。

[neau@mail ~]$ echo $myfile

cat test

让我们来试一下eval命令,记住eval命令将会对该变量进行两次扫瞄。

[neau@mail ~]$ eval $myfile

Hello World!!!

I am a chinese Boy!

从上面的结果可以看出,使用eval命令不但可以置换该变量,还能够执行相应的命令。第一次扫描进行了变量置换,

第二次扫描执行了该字符串中所包含的命令cat test。



3.命令还可以用来显示出传递给脚本的最后一个参数

[neau@mail ~]$ cat test1

#!/bin/bash

echo "Total of the arguments passed $#"

echo "The process Id is $$"

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

[neau@mail ~]$ ./test1 value bank test last

Total of the arguments passed 4

The process Id is 21545

Last argument is last

在上面的脚本中, eval命令首先把$$#解析为当前shell的参数个数,然后在第二次扫描时得出最后一个参数。



4.给每个值一个变量名

可以给一个值一个变量名。下面我对此做些解释,假定有一个名为test2的文件:

[neau@mail ~]$ cat test2

CCTV 5

CHANGEL SPORTS

LIKE YES

你希望该文件中的第一列成为变量名,第二列成为该变量的值,这样就可以:

[neau@mail ~]$ cat test2

COMMANY TQ

LANGUE ENGLISH

LIKE YES

[neau@mail ~]$ cat test3

#!/bin/bash

while read NAME VALUE

do

eval "${NAME}=${VALUE}"

done

echo "$COMMANY $LANGUE $LIKE"

[neau@mail ~]$ ./test3

TQ ENGLISH YES

shell eval命令使用的更多相关文章

  1. shell eval命令

    1. eval command-line 其中command-line是在终端上键入的一条普通命令行.然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次.如: pipe=&qu ...

  2. shell解析命令行的过程以及eval命令

    本文说明的是一条linux命令在执行时大致要经过哪些过程?以及这些过程的大致顺序. 1.1 shell解析命令行 shell读取和执行命令时的大致操作过程如下图: 以执行以下命令为例: echo -e ...

  3. 理解shell的eval命令

    看以下两条命令:[zhangsan@XEN /sys]$ a="ls";b="\$a";c="$b";"$c"Hey! ...

  4. (转)shell解析命令行的过程以及eval命令

    shell解析命令行的过程以及eval命令   本文说明的是一条linux命令在执行时大致要经过哪些过程?以及这些过程的大致顺序. 1.1 shell解析命令行 shell读取和执行命令时的大致操作过 ...

  5. shell中eval命令

    原文:http://www.cnblogs.com/xdzone/archive/2011/03/15/1984971.html 语法:eval cmdLine eval会对后面的cmdLine进行两 ...

  6. shell——sort、uniq、tr、cut和eval命令

    一.排序命令sort 以行位单位对文件内容进行排序,也可以根据不同的数据类型进行排序 格式:sort [选项] 参数 格式:cat file | sort 选项 1.2常用选项 选项说明 -f 忽略大 ...

  7. shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式

    shell脚本命令(sotr/unip/tr/cut/eval)与正则表达式 1.sort命令 概述: Linux sort命令用于将文本文件内容加以排序. sort命令可针对文本文件的内容,以行为单 ...

  8. shell中eval命令妙用——变量嵌套替换

    eval命令妙用--变量嵌套替换 eval命令在Linux下的应用非常广泛,在写脚本的时候遇到一个变量嵌套的问题,用eval迎刃而解,略试不爽啊. var1="hello" i=1 ...

  9. shell eval用法

    转自:http://blog.csdn.net/w_ww_w/article/details/7075867 eval可读取一连串的参数,然后再依参数本身的特性来执行.eval是shell内建命令,可 ...

随机推荐

  1. 二维数组展示到DataGridView(c#)

    窗体程序中二维数组展示到DataGridView public void TwoDArrayShowINDatagridview(string[,] arr) { DataTable dt = new ...

  2. JavaScript 经典实例日常收集整理(常用经典)

    作者:阿讯小飞 原文来自:脚本之家 跨浏览器添加事件 //跨浏览器添加事件 function addEvent(obj,type,fn){ if(obj.addEventListener){ obj. ...

  3. MVC学习四:Razor视图语法

    @{ Layout = null; } <hr /> <!DOCTYPE html> @this.GetType().Assembly.Location.ToString() ...

  4. 使用TextView/EditText应该注意的地方,监听EditText,addTextChangedListener

    http://blog.csdn.net/huichengongzi/article/details/7818676 监听 EditText 控件: addTextChangedListener(ne ...

  5. EJB JPQL语句查询

    JPQL就是一种查询语言,具有与SQL 相类似的特征,JPQL是完全面向对象的,具备继承.多态和关联等特性,和hibernate HQL很相似.   查询语句的参数 JPQL语句支持两种方式的参数定义 ...

  6. JQuery 禁用后退按钮

    jQuery(document).ready(function () { if (window.history && window.history.pushState) { $(win ...

  7. Could..... not preload global game manager

    发布PC版后出现这个错误,是没有破解成功,卸载后重新安装破解就可以了 http://www.cocoachina.com/bbs/read.php?tid=84587

  8. java容易混淆的的内部类相关概念

    关于内部类: 作用: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内部类所实现的 ...

  9. 为什么需要Vlan ? Vlan实现原理 ? 不同Vlan的通信 ?

    好文章!!良心推荐!!! 原文链接 https://blog.csdn.net/cwm_meng_home/article/details/49762807

  10. SpringBoot学习15:springboot异常处理方式5(通过实现HandlerExceptionResolver类)

    修改异常处理方式4中的全局异常处理controller package com.bjsxt.exception; import org.springframework.context.annotati ...