shell中的变量与eval(转)

原文链接:http://www.361way.com/shell-eval-variable/4957.html

shell 中经常会用到变量的嵌套的情况。比如,单个或多个变量的值作为变量名,再对该变量名取$获取其内部的变量的情况,这种脚本写起来很难搞,还好有eval 命令方便我们处理这种情况。便于理解,先来一个示例:

  1. #!/bin/bash
  2. a=‘my‘
  3. b=‘site‘
  4. my_site=‘my site www.361way.com‘
  5. echo a_b is "$a"_"$b"
  6. echo $("$a"_"$b")
  7. web="$a"_"$b"
  8. echo web is $web
  9. eval echo ‘$‘"$a"_"$b"
  10. eval echo ‘$‘{"$a"_"$b"}

比如上面这个示例,猜猜看它的运行结果是什么?执行结果如下:

  1. # sh a.sh
  2. a_b is my_site
  3. a.sh: line 6: my_site: command not found
  4. web is my_site
  5. my site www.361way.com
  6. my site www.361way.com

从上面可以看出$("$a"_"$b")这种写法会报错,可以正确取到我们想要的结果可以有两种写法:eval echo ‘$‘"$a"_"$b" 或 eval echo ‘$‘{"$a"_"$b"} 。

eval 这么神奇,到底是个什么东东?

eval 命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量,该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为复杂变量。eval命令即可以用于回显简单变量,也可以用于回显复杂变量。

再来个示例,该例中文件有两列,第一列为变量名,第二列为变量值,读取该文件后将第二列的值赋值给第一列,通过echo ${第一列列名} 就可以获取后面的value值。如下:

  1. 变量名与变量值映射表:
  2. # more name_value.txt
  3. site www.361way.com
  4. mail [email protected].com
  5. user admin
  6. 脚本内容:
  7. # cat b.sh
  8. #!/bin/bash
  9. while read NAME VALUE
  10. do
  11. eval "${NAME}=${VALUE}"
  12. done < name_value.txt
  13. echo "$site $mail $user"

执行该脚本,结果如下:

  1. # sh b.sh
  2. www.361way.com [email protected].com admin
时间: 2024-12-17 05:47:06

shell中的变量与eval(转)的相关文章

二、Shell中的变量

变量是任何程序或脚本的重要组成部分.变量为程序或脚本访问内存中的可被修改的一块数据提供了简单的方式.Linux Shell中的变量可以被指定为任意的数据类型.Shell中有两种变量的类型:系统变量(环境变量)和用户自定义的变量(本地变量或Shell变量). 环境变量:作用域为当前shell进程及其子进程:环境变量一般均为大写.常用的环境变量有: 系统变量 含义 BASH_VERSION 保存bash实例的版本 DISPLAY 设置X display名字 EDITOR 设置默认的文本编辑器 HIS

1.Linux Shell中的变量

1. Shell变量类型 Shell是一种动态类型语言(不使用显式的数据声明)和弱类型语言(变量的类型操作根据需求而不同).Shell中的变量是不分类型的(都是字符串类型),但是依赖于具体的上下文,Shell编程也允许比较操作和整数操作. 2. Shell变量的分类 Shell中有3种变量:用户变量.位置变量(Processing Parameter).环境变量. 1.用户变量:用户在Shell编程过程中定义的变量,分为全局变量和局部变量.默认情况下,用户定义的Shell变量为全局变量,如果要指

C Shell中的变量数组

今天刚刚在看一点C Shell的内容,发现一个挺好玩的东西!就是环境变量可以像数组那样来设置!具体设置语法如下: set variable=(element1 element2 ...) //注意元素之间用空格来间隔 比如我在C Shell中运行了这么一条语句 set var=(123 def hij),那么他就表示设定了一个变量数组,其中var[1]是123,var[2]是def!很奇怪的是它这个数组不是从0开始的,var[0]是一个空的字符串!或许这个var[0]像C语言主函数的argv[0

shell中的变量功能

本地变量: set VARNAME=VALUE:作用域为整个bash进程 局部变量: local VARNAME=VALUE:作用域为当前代码段 环境变量: export VARNAME=VALUE 或者    VARNAME=VALUE                      export VARNAME 位置变量: $1   $2    ...... 特殊变量 : $? :上一条命令的执行状态返回值 程序执行,可能有两类返回值:1.程序执行结果,2程序状态返回代码(0-255),其中0是正

python中如何使用shell命令, 及python 与shell 中的变量相互通信

1. python中使用shell命令有多种方法,我自己觉得比较好用的是用commands模块: import commands a,b = commands.getstatusoutput("ls -Al") a是退出状态(int类型), b是shell 命令的输出结果 python -> shell: 1.环境变量 import os  var=123或var='123'os.environ['var']=str(var)  #environ的键值必须是字符串   os.sy

Shell中的变量

1.常用系统变量 $HOME.$PWD.$SHELL.$USER 家目录.当前目录.默认解释器.当前用户 显示当前Shell中所有变量:set 2.自定义变量 2.1.基本语法 (1)定义变量:变量=值    等号左右没有空格 (2)撤销变量:unset 变量 (3)声明静态变量:readonly 变量,注意:不能unset,不能改变值 2.2变量定义规则 (1)变量名称可以由字母.数字和下划线组成,但是不能以数字开头,环境变量名建议大写. (2)等号两侧不能有空格. (3)在bash中,变量默

2、Shell中的变量

1 系统变量 1. 常用系统变量 $HOME.$PWD.$SHELL.$USER等 2.案例实操 (1)查看系统变量的值 [[email protected] datas]$ echo $HOME /home/atguigu (2)显示当前Shell中所有变量:set [[email protected] datas]$ set BASH=/bin/bash BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() 2 自定义变量 1.基本语法 (1)定义变量:变量=值

shell中的`和$()、eval、crontab

一.`和$()的区别 反引号本身就对\进行了转义,保留了本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示. 反引号中: \\ = \ $()中:\ = \ 注意:反引号是老的用法,$()是新的用法,不管是在学习测试中,还是在实际工作中,$()的用法都是被推荐的. 二.eval命令 eval会对后面的命令进行两遍扫描,如果第一遍扫描后,命令是个普通命令,则执行此命令:如果命令中含有变量的间接引用,则保证间接引用的语义. 例如有一个文件test1,里面的内容是"this

shell中的变量及shell条件判断

Shell 基础之变量和条件判断 一.shell概述 1.shell概述: shell是一个命令行的解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统及程序,用户可以用shell来启动.挂起.停止甚至编写一些程序,shell还是一个功能强大的编程语言,shell是解释性的脚本语言,在shell中可以直接调用Linux命令. 2.shell脚本的用途 (1)自动化常用的命令 (2)执行系统管理和故障排除 (3)执行简单的应用程序 (4)处理文本或文件 3.shell的分类 (1