转自:http://blog.csdn.net/w_ww_w/article/details/7075867

eval可读取一连串的参数,然后再依参数本身的特性来执行。eval是shell内建命令,可用shell查看其用法。参数不限数目,彼此之间用分号隔开。

eval [参数]

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"

如果我们e c h o该变量,我们将无法列出t e
s t 文件中的内容。

[neau@mail ~]$ echo $myfile

cat test

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

[neau@mail ~]$ eval $myfile

Hello World!!!

I am a chinese Boy!

从上面的结果可以看出,使用e v a l命令不但可以置换该变量,还能够执行相应的命令。第

一次扫描进行了变量置换,第二次扫描执行了该字符串中所包含的命令cat
test。

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

[neau@mail ~]$ cat test1

#!/bin/bash

echo "Total of the arguments passed $#"

echo "The process Id is $$"

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

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

Total of the arguments passed 4

The process Id is 21545

Last argument os last

在上面的脚本中, e v a l命令首先把$ $ #解析为当前s h
e l l的参数个数,然后在第二次扫描时

得出最后一个参数。

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 <test2

echo "$COMMANY $LANGUE $LIKE"

[neau@mail ~]$ ./test3

TQ ENGLISH YES

参考:

http://www.cnblogs.com/huzhiwei/archive/2012/03/14/2395956.html

http://www.runoob.com/linux/linux-comm-eval.html   菜鸟教程

shell eval用法的更多相关文章

  1. ASP.NET中EVAL用法大全

    <%# Bind("Subject") %> //绑定字段<%# Container.DataItemIndex + 1%> //实现自动编号<%# ...

  2. Shell常见用法小记

    shell的简单使用 最近发现shell脚本在平常工作中简直算一把瑞士军刀,很多场景下用shell脚本能实现常用的简单需求,而之前都没怎么学习过shell,就趁机把shell相关的语法和常见用法总结了 ...

  3. JavaScript学习(2)call&apply&bind&eval用法

    javascript学习(2)call&apply&bind&eval用法 在javascript中存在这样几种特别有用的函数,能方便我们实现各种奇技淫巧.其中,call.bi ...

  4. Linux shell ${}简单用法

    转自:Linux shell ${}简单用法 为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.t ...

  5. eval用法

    在shell的学习中,我们会遇到这两种符号:反引号(` `)和$(),那么它们之间有什么区别和联系呢? 我们都知道在bash中,反引号和$()都是用来做命令替换的,命令替换就是用来重组命令行,先完成引 ...

  6. linux之eval用法(高级bash程序员的必修之技)

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

  7. shell 函数用法

    近期在学习shell编程方面的知识,写的不怎么好,请大家多多指点,下面给大家分享一下shell函数的用法. 我们为什么要用shell函数? 简单的说,函数的作用就是把程序多次调用相同的代码部分定义成一 ...

  8. [shell]shell 中| && || () {} 用法以及shell的逻辑与或非

    转自:https://www.jianshu.com/p/617c1ee1e46e | 运算符 管道符号,是unix一个很强大的功能,符号为一条竖线:"|".用法: command ...

  9. shell eval命令使用

    eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令. 该命令适用于那些一次扫描无法实现其功能的变量.该命令对变量进行两次扫描. 这些需要进行两次扫描的变量有时被称为复杂变量.不过这些变量本 ...

随机推荐

  1. data structure | heap

    #include <iostream> #include <string.h> using namespace std; template <class T> cl ...

  2. Hadoop工程包架构解析

    Hadoop源码解析 1 --- Hadoop工程包架构解析 1 Hadoop中各工程包依赖简述    Google的核心竞争技术是它的计算平台.Google的大牛们用了下面5篇文章,介绍了它们的计算 ...

  3. 《GK101任意波发生器》升级固件发布(版本:1.0.2build955)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build955 编译日期:2015-12-14 ====================================== 二. ...

  4. java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntim [问题点数:40分,结帖人wangxiaohua_001]

    14:56:10.093 WARN!! Error for /butterfly/plugins/zhonghang/UsefulData/save_usefuldata.bshjava.lang.N ...

  5. 查找文件是否安装以及安装路径(Ubuntu 下 )

    参考:<linux下如何查看某个软件 是否安装??? 安装路径在哪???> 原文: 如果你使用rpm -ivh matlab装的, 用rpm -qa | grep matlab肯定是能够找 ...

  6. 【翻译】Kinect v2程序设计(C++) BodyIndex篇

    通过Kinect SDK v2预览版,取得BodyIndex(人体区域)的方法和示例代码. 上一节,介绍了从Kinect v2预览版用Kinect SDK v2预览版获取Depth数据的方法.   这 ...

  7. 常用的API接口,返回JSON格式的服务API接口

    物流接口 快递接口: http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号 ps:快递公司编码:申通="shentong&qu ...

  8. PHP抓取采集类snoopy介绍

    PHP抓取采集类snoopy介绍 一个PHP的抓取方案 在 2011年07月04日 那天写的     已经有 10270 次阅读了 感谢 参考或原文   服务器君一共花费了14.288 ms进行了2次 ...

  9. Yii源码阅读笔记(六)

    组件(component),是Yii框架的基类,实现了属性.事件.行为三类功能,如果需要事件和行为的功能,需要继承该类,不需要可直接继承Object类: namespace yii\base; use ...

  10. 表单序列化 js

    function serliaze(form) { //序列化表单 var obj = {}; $.each(form.serializeArray(), function (index) { if ...