`

常用命令-eval

 
阅读更多

 

1. 工作原理及用法

用法:eval command-line

原理:eval主要用在对参数的特殊处理上面的,一般的命令行,shell处理参数就只执行一遍,像转义和变量转变;但加上eval后就可以对参数经行两遍处理;网上有说是对command-line处理两遍,我认为是不合理的。一个eval只能使shell对参数多一次处理,因此有几个eval就可以多加几次,即eval eval command-line 这样就能对参数进行三次编译,但此时应特别注意参数的转义,下面有例子说明。

 

eval命令会计算(evalue)它的参数,这些参数作为表达式计算后重新组合为一个字符串,然后作为一个命令被执行。

eval最常见的用法是将动态生成的命令行计算并执行。例如:

$ name=woodie

$ cmd="echo Helllo $name\! "

$ eval $cmd

Hello woodie!

 

2. 举例讲解

例一:(网络下载)

pipe="|"

eval ls $pipe wc -l

shell1次扫描命令行时,它替换出pipe的值|,接着eval使它再次扫描命令行,这时shell把|作为管道符号了。

如果变量中包含任何需要shell直接在命令行中看到的字符(不是替换的结果),就可以使用eval。命令行结束符(;  &),Io重定向符(< >)和引号就属于对

shell具有特殊意义的符号,必须直接出现在命令行中。

x=100

ptrx=x

eval echo \$$ptrx 指向ptrx,用这里的方法可以理解b中的例子

100 打印100

eval $ptrx=50 50存到ptrx指向的变量中。

echo $x

50 打印50

例二:

root@localhost:~/test#set tao shou kun 

root@localhost:~/test#echo \$$#

$3

root@localhost:~/test#eval echo \$$#

kun

root@localhost:~/test#

例三:(对三重的支持)

root@localhost:~/test#aabbcc=alibaba

root@localhost:~/test#a=aa

root@localhost:~/test#b=bb

root@localhost:~/test#c=cc

root@localhost:~/test#alibaba="hello world"

root@localhost:~/test#eval echo \$\$$a$b$c

11990aabbcc

root@localhost:~/test#eval echo \\$\$$a$b$c

$alibaba

root@localhost:~/test#eval eval echo \$\$$a$b$c

11990aabbcc

root@localhost:~/test#eval eval echo \\$\$$a$b$c

hello world

注意这里的参数转义,第一遍处理后参数应该是:\$$aabbcc,第二次是:$alibaba,第三次就正好是:hello world

 

eval用法三例(网络收集)

例一:

#寻找合符条件的变量名,然后将该变量的值赋予另一变量

v1=aaa

v2=bbb

c=1

if [ $c -eq 1 ]

then

vname=v$c #找到符合条件的变量名为v1

eval vvv="$"$vname ; echo vvv: $vvv #将变量v1的值赋予vvv,,使vvv=aaa

eval vvv='$'$vname ; echo vvv: $vvv #将变量v1的值赋予vvv,,使vvv=aaa

#eval vvv=$$vname ; echo vvv: $vvv #错误用法

fi

 

#例二:

#以变量v1的值aaa作为变量名,将变量vaaa的值赋予这一新定义的变量aaa

v1=aaa ; vaaa="This is aaa"

#eval $v1=$vaaa ; echo aaa: $aaa #错误用法

#eval $v1="$vaaa" ; echo aaa: $aaa #错误用法

eval $v1='$vaaa' ; echo aaa: $aaa

 

#例三:

#以变量v1的值aaa作为变量名,并将变量名字串作为值赋予自身

v1=aaa ; vaaa="This is aaa"

eval $v1=$v1 ; echo aaa: $aaa #与例二的错误用法不同,这一用法是正确的

eval $v1="$v1" ; echo aaa: $aaa #与例二的错误用法不同,这一用法是正确的

eval $v1='$v1' ; echo aaa: $aaa

分享到:
评论

相关推荐

    SD.rar_SD_STM32 读写S_stm32 SD_stm3210b-eval sd_产品stm32

    STM3210B-EVAL开发板是一个常用的评估平台,它提供了对STM32系列微控制器进行原型设计和测试的硬件资源。 首先,我们要理解SD卡的工作原理。SD卡(Secure Digital Memory Card)是一种非易失性存储设备,广泛用于...

    redis基本命令-2023C-m开发笔记

    四、其他常用命令 - `INFO`:获取服务器信息,包括内存使用、客户端连接、持久化状态等。 - `KEYS pattern`:查找匹配模式的所有键,注意在生产环境慎用,可能导致性能下降。 - `FLUSHDB`:清除当前数据库中的所有...

    matlab常用命令汇总

    ### MATLAB常用命令汇总详解 #### 一、环境与帮助命令 **标题与描述解析:** 本部分主要涉及MATLAB环境中的一些基础操作命令以及获取帮助的相关指令。 - **`addpath`**: 将指定目录添加到MATLAB的搜索路径中。 - ...

    Matlab常用命令集合

    ### Matlab常用命令集合详解 #### 一、基本操作与环境设置 **1. 清除与显示** - **clear:** 用于清除工作空间中的变量。 - **disp:** 显示变量或字符串的内容。 - **length:** 返回数组的长度(最长维度上的...

    linux基本命令学习

    - **常用命令**: - `cat`:显示文件内容。 - `more`/`less`:分页查看文件内容。 - `head`:显示文件的前几行。 - `tail`:显示文件的后几行。 - `grep`:搜索文件中的指定模式。 #### 第十课(四) 文件内容...

    Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令.pdf

    本篇笔记主要探讨了Shell脚本中的函数定义、参数传递、标准输入/输出(IO)、脚本调试以及一些常用的内置命令。 1. **函数定义**: Shell函数是一组命令的集合,它们作为一个整体在脚本中被调用。定义函数的基本...

    maple 常用命令.doc

    ### Maple 常用命令详解 #### 数值计算与转换 - **`evalf(2/3)`**:此命令用于将分数 `2/3` 转换为十进制数值表示。Maple 中的 `evalf` 函数可以对任意表达式进行数值化处理。 - **`length(1000!)`**:`length` ...

    Linux常用命令集

    ### Linux常用命令集详解 #### 引言 随着信息技术的发展,Linux作为一种开源的操作系统,在服务器领域及开发环境中占据了举足轻重的地位。相比于Windows,Linux以其稳定性和安全性著称,并且具备丰富的命令行工具...

    MATLAB快捷键、常用库函数、命令大全

    以上是根据提供的文档内容整理出来的MATLAB常用命令、函数和快捷键的详细介绍。通过这些内容的学习和实践,可以极大地提高在MATLAB中进行编程和数据分析的能力。希望这份指南能够帮助您更好地掌握MATLAB,从而在科学...

    华为TCL培训教程(PDF)

    它不仅介绍了TCL的基本语法和常用命令,还详细讲解了如何使用TCL进行更复杂的编程任务,如列表操作、控制流管理和字符串处理等。此外,教程还包含了过程定义、变量管理等内容,这些都是编写高效且易于维护的TCL程序...

    mongodb的常用命令

    以下是一些MongoDB的常用命令及其详细解释: 1. **停止数据库**: - 使用`control-c`:在终端中按下`control-c`可以中断当前运行的MongoDB进程。 - `use admin`:切换到`admin`数据库,这是一个特殊的角色,可以...

    matlab常用命令

    对于初学者而言,了解和掌握一些常用的命令是至关重要的。以下是一些MATLAB的基本命令和功能的详细说明: 1. **路径管理**: - `addpath`:将指定的目录添加到MATLAB的搜索路径,使得MATLAB能在这个路径下找到相关...

    Linux常用命令用法100个.docx

    以下是 100 个常用的 Linux 命令用法,涵盖文件管理、权限管理、系统信息、磁盘管理、网络管理等方面。 文件管理 1. echo aa &gt; test.txt:将内容写入到文件中,并覆盖原文件。 2. echo bb &gt;&gt; test.txt:将内容追加...

    TCL语言教程

    - **执行字符串中的命令**:使用`eval`命令执行存储在字符串中的命令。 ##### source命令 - **读取文件中的命令**:使用`source`命令执行从文件读取的命令。 #### 六、过程(Procedure) TCL支持定义可复用的过程。 ...

    matlab常用命令速查 pdf

    ### MATLAB常用命令详解 MATLAB,作为数学与科学计算领域的重要工具,其强大的功能和丰富的命令集使其在数据处理、算法开发、系统仿真等方面有着广泛的应用。以下是对部分MATLAB常用命令的详细解析,旨在帮助用户...

    linux常用命令

    Linux常用命令是操作系统中的基础工具,用于执行各种任务,包括文件操作、磁盘管理、系统维护和进程控制等。以下是对标题和描述中涉及的部分Linux命令的详细解释: 1. **man** 和 **info**: - `man` 命令用于查看...

    Linux详细教程大全之shell脚本基础3-函数及常用命令.docx

    - `eval`执行字符串中的命令,允许动态生成和执行代码。 - `exec`可以替换当前shell进程,或者修改文件描述符。 - `exit n`以指定的退出状态n结束脚本。 - `export`用于设置环境变量,使其在子shell中可见。 8....

Global site tag (gtag.js) - Google Analytics