eval in Shell

  语法:eval cmdLine
  eval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令;

  如果cmdLine中含有变量的间接引用,则保证间接引用的语义。

  举例如下:

  func 11 22 33 44

  如果要输出最后一个参数44,可以使用如下命令:

  echo $4

  但是如果我们不知道有几个参数的时候,要输出最后一个参数,大家可能会想到使用$#来输出最后一个参数,

  如果使用命令:

  echo "\$$#"

  则得到的结果是 $4,而不是我们想要的44。这里涉及到一个变量间接引用的问题,我们的本意是输出 $4,默认

情况下,命令后忽略变量间接引用的情况。

  这时候,就可以使用eval命令。

  eval echo "\$$#"

  得到的结果为44.

Reference:

shell中eval的使用问题 : http://doudouclever.blog.163.com/blog/static/175112310201252111104169/

时间: 2024-10-13 02:51:41

eval in Shell的相关文章

shell eval用法

转自:http://blog.csdn.net/w_ww_w/article/details/7075867 eval可读取一连串的参数,然后再依参数本身的特性来执行.eval是shell内建命令,可用shell查看其用法.参数不限数目,彼此之间用分号隔开. eval [参数] eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令.该命令适用于那些一次扫描无法实现其功能的变量.该命令对变量进行两次扫描.这些需要进行两次扫描的变量有时被称为复杂变量.不过这些变量本身并不复杂.eval命令

shell学习三十八天----执行顺序和eval

执行顺序和eval shell从标准输入或脚本中读取的每一行称为管道,它包含了一个或多个命令,这些命令被一个或多个管道字符(|)隔开. 事实上嗨哟很多特殊符号可用来分割单个的命令:分号(;),管道(|),&,逻辑AND(&&),逻辑OR(||).对于每一个地区的管道,shell都会将命令分割,为管道设置I/O,并且对每一个命令依次执行下面的操作. 看起来很复杂,但是每一个步骤都是在shell的内存里发生的,shell不会真的把每个步骤的发生演示给我们看.所以这是我们分析shell内

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

1. eval command-line 其中command-line是在终端上键入的一条普通命令行.然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次.如: pipe="|" eval ls $pipe wc -l shell第1次扫描命令行时,它替换出pipe的值|,接着eval使它再次扫描命令行,这时shell把|作为管道符号了. 如果变量中包含任何需要shell直接在命令行中看到的字符(不是替换的结果),就可以使用eval.命令行结束符(:| &

shell面试专题

1.eval在shell中有什么作用?请举个例子说明? 作用: #!/bin/bash aa=h1 bb=h2 var=(aa bb) for vas in ${var[@]} do echo $vas eval var_temp=\$${vas} echo $var_temp done 2.dirname有什么作用?请举个例子说明? 作用:获取当前脚本路径 例子: #!/bin/bash cd `dirname $0` pwd;ls 3.ssh -o stricthostkeychecking

Shell编程-03-Shell中的特殊变量和扩展变量

特殊变量 ? ? 在Shell中的特殊变量主要分别两种位置参数变量.状态变量两种. 位置参数变量 ? ? Shell中的位置参数变量主要是指$0.$1.$#等,主要用于从命令行.函数或脚本执行等地方传递参数.详细说明如下所示: $0:获取当前执行的Shell脚本的文件名,如脚本中包含路径,则输出也包括路径 $n:获取当前执行的Shell脚本的第n个参数值,如n>9,则需要使用用大括号,如${10},各参数间用空格进行分隔 $#:获取当前执行的Shell脚本传入参数的总个数 $*:获取当前执行的S

shell-01

Chapter 1 如何才能学好shell编程 1.0多写.多写:每个代码都要写 Chapter 2 Shell脚本 2.1 什么是shell? 2.2 什么是shell脚本? 2.3 shell脚本的地位 2.4 shell脚本的种类 B shell(bash.sh).C shell 2.5 常用的操作系统默认的shell [[email protected] ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /us

Webshell实现与隐藏探究

一.什么是webshell webshell简介 webshell,顾名思义:web指的是在web服务器上,而shell是用脚本语言编写的脚本程序,webshell就是就是web的一个管理 工具,可以对web服务器进行操作的权限,也叫webadmin.webshell一般是被网站管理员用于网站管理.服务器管理等等一些用途,但是由于 webshell的功能比较强大,可以上传下载文件,查看数据库,甚至可以调用一些服务器上系统的相关命令(比如创建用户,修改删除文件之类的),通常被 黑客利用,黑客通过一

小密圈知识

p师傅的经典漏洞(小密圈的那些姿势) 2017年2月27日 p师傅在小密圈po的一个问题 <?php $str = addslashes($_GET['option']); $file = file_get_contents('xxxxx/option.php'); $file = preg_replace('|\$option=\'.*\';|', "\$option='$str';", $file); file_put_contents('xxxxx/option.php',

Ubuntu Server : 自动更新

Ubuntu(16.04/18.04) 默认会每天自动安装系统的安全更新,但是不会自动安装包的更新.本文梳理 Ubuntu 16.04/18.04 系统的自动更新机制,并介绍如何配置系统自动更新所有的包.说明:简单起见,本文中使用 Ubuntu 指代 Ubuntu 16.04/18.04. 系统需要更新 当我们远程登录系统时,会收到如下图所示的更新相关的消息: 红框中的第一行文字说明系统中有 149 个包需要更新.第二行说明没有安全相关的包需要更新.之所以会这样,是因为 Ubuntu 默认的配置