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. pymongo 常用操作函数

    pymongo 是 mongodb 的 python Driver Editor. 记录下学习过程中感觉以后会常用多一些部分,以做参考. 1. 连接数据库 要使用pymongo最先应该做的事就是先连上 ...

  2. Windos下Android(ADT Bundle)配置NDK的两种方法------ADT、Cygwin、NDK配置汇总(转)

    转自:http://blog.csdn.net/yanzi1225627/article/details/16897877 Android开发环境由windows下ADT Bundle搭建,且按前文h ...

  3. JVM 虚拟机内存深入探究

    [<深入理解java虚拟机>-整理笔记] by  lijun JVM虚拟机内存逻辑模型: 方法区(全局变量 静态数据 常量等) 线程共享 堆栈区(对象实例 数组数据 new generat ...

  4. 线段树扫描线总结(POJ 1389)

    扫描线算是线段树的一个比较特殊的用法,虽然NOIP不一定会考,但是学学还是有用的,况且也不是很难理解. 以前学过一点,不是很透,今天算是搞懂了. 就以这道题为例吧:嘟嘟嘟 题目的意思是在一个二维坐标系 ...

  5. 使用vue自定义组件以及动态时间

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 【luogu P1082 同余方程】 题解

    最近一直在学习数论,讲得很快,害怕落实的不好,所以做一道luogu的同余方程练练手. 关于x的同余方程 ax ≡ 1 mod m 那么x其实就是求a关于m的乘法逆元 ax + my = 1 对于这个不 ...

  7. Android学习笔记_31_通过后台代码生成View对象以及动态加载XML布局文件到LinearLayout

    一.布局文件part.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  8. Code First 一

    Code-First和我们的数据库优先方式是相反的,数据库优先是通过数据库映射出相应的类和上下文,Code-First测试通过创建的类和上下文得到相应的数据库. Code-First主要用于领域驱动设 ...

  9. 如何配置Java环境变量

    百度经验 | 百度知道 | 百度首页 | 登录 | 注册 新闻 网页 贴吧 知道 经验 音乐 图片 视频 地图 百科 文库 帮助   发布经验 首页 分类 任务 回享 商城 特色 知道 百度经验 &g ...

  10. OSI七层模型详解(物理层、数据链路层、网络层、传输层.....应用层协议与硬件)

    原文链接 https://blog.csdn.net/xw20084898/article/details/39438783