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
shell第1次扫描命令行时,它替换出pipe的值|,接着eval使它再次扫描命令行,这时shell把|作为管道符号了。
如果变量中包含任何需要shell直接在命令行中看到的字符(不是替换的结果),就可以使用eval。命令行结束符(; | &),I/o重定向符(< >)和引号就属于对
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
分享到:
相关推荐
STM3210B-EVAL开发板是一个常用的评估平台,它提供了对STM32系列微控制器进行原型设计和测试的硬件资源。 首先,我们要理解SD卡的工作原理。SD卡(Secure Digital Memory Card)是一种非易失性存储设备,广泛用于...
四、其他常用命令 - `INFO`:获取服务器信息,包括内存使用、客户端连接、持久化状态等。 - `KEYS pattern`:查找匹配模式的所有键,注意在生产环境慎用,可能导致性能下降。 - `FLUSHDB`:清除当前数据库中的所有...
### MATLAB常用命令汇总详解 #### 一、环境与帮助命令 **标题与描述解析:** 本部分主要涉及MATLAB环境中的一些基础操作命令以及获取帮助的相关指令。 - **`addpath`**: 将指定目录添加到MATLAB的搜索路径中。 - ...
### Matlab常用命令集合详解 #### 一、基本操作与环境设置 **1. 清除与显示** - **clear:** 用于清除工作空间中的变量。 - **disp:** 显示变量或字符串的内容。 - **length:** 返回数组的长度(最长维度上的...
- **常用命令**: - `cat`:显示文件内容。 - `more`/`less`:分页查看文件内容。 - `head`:显示文件的前几行。 - `tail`:显示文件的后几行。 - `grep`:搜索文件中的指定模式。 #### 第十课(四) 文件内容...
本篇笔记主要探讨了Shell脚本中的函数定义、参数传递、标准输入/输出(IO)、脚本调试以及一些常用的内置命令。 1. **函数定义**: Shell函数是一组命令的集合,它们作为一个整体在脚本中被调用。定义函数的基本...
### Maple 常用命令详解 #### 数值计算与转换 - **`evalf(2/3)`**:此命令用于将分数 `2/3` 转换为十进制数值表示。Maple 中的 `evalf` 函数可以对任意表达式进行数值化处理。 - **`length(1000!)`**:`length` ...
### Linux常用命令集详解 #### 引言 随着信息技术的发展,Linux作为一种开源的操作系统,在服务器领域及开发环境中占据了举足轻重的地位。相比于Windows,Linux以其稳定性和安全性著称,并且具备丰富的命令行工具...
以上是根据提供的文档内容整理出来的MATLAB常用命令、函数和快捷键的详细介绍。通过这些内容的学习和实践,可以极大地提高在MATLAB中进行编程和数据分析的能力。希望这份指南能够帮助您更好地掌握MATLAB,从而在科学...
它不仅介绍了TCL的基本语法和常用命令,还详细讲解了如何使用TCL进行更复杂的编程任务,如列表操作、控制流管理和字符串处理等。此外,教程还包含了过程定义、变量管理等内容,这些都是编写高效且易于维护的TCL程序...
以下是一些MongoDB的常用命令及其详细解释: 1. **停止数据库**: - 使用`control-c`:在终端中按下`control-c`可以中断当前运行的MongoDB进程。 - `use admin`:切换到`admin`数据库,这是一个特殊的角色,可以...
对于初学者而言,了解和掌握一些常用的命令是至关重要的。以下是一些MATLAB的基本命令和功能的详细说明: 1. **路径管理**: - `addpath`:将指定的目录添加到MATLAB的搜索路径,使得MATLAB能在这个路径下找到相关...
以下是 100 个常用的 Linux 命令用法,涵盖文件管理、权限管理、系统信息、磁盘管理、网络管理等方面。 文件管理 1. echo aa > test.txt:将内容写入到文件中,并覆盖原文件。 2. echo bb >> test.txt:将内容追加...
- **执行字符串中的命令**:使用`eval`命令执行存储在字符串中的命令。 ##### source命令 - **读取文件中的命令**:使用`source`命令执行从文件读取的命令。 #### 六、过程(Procedure) TCL支持定义可复用的过程。 ...
### MATLAB常用命令详解 MATLAB,作为数学与科学计算领域的重要工具,其强大的功能和丰富的命令集使其在数据处理、算法开发、系统仿真等方面有着广泛的应用。以下是对部分MATLAB常用命令的详细解析,旨在帮助用户...
Linux常用命令是操作系统中的基础工具,用于执行各种任务,包括文件操作、磁盘管理、系统维护和进程控制等。以下是对标题和描述中涉及的部分Linux命令的详细解释: 1. **man** 和 **info**: - `man` 命令用于查看...
- `eval`执行字符串中的命令,允许动态生成和执行代码。 - `exec`可以替换当前shell进程,或者修改文件描述符。 - `exit n`以指定的退出状态n结束脚本。 - `export`用于设置环境变量,使其在子shell中可见。 8....