原文链接: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 itybku@139.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 itybku@139.com admin

转载于:https://www.cnblogs.com/hubavyn/p/7455235.html

shell中的变量与eval(转)相关推荐

  1. shell中的变量及运算符

     变量赋值与环境 语法 export name[=word] export –p readonly name[=word] readonly –p export用于修改或打印环境变量,readon ...

  2. 学习linux杂七杂八——关于shell中的变量

    var=value 变量定义并赋值,注意等号前后不能与空格相邻,如果需要有空格(其他特> 殊字符,如$,回车,",',\等)可用转义字符\进行转义. 变量命名规则同C语言. 变量值两端 ...

  3. [转]Shell中脚本变量和函数变量的作用域

     转自:  http://blog.csdn.net/ltx19860420/article/details/5570902   在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变 ...

  4. linux——shell 中的变量

    变量的定义 变量,即在程序运行过程中它的值是允许改变的量 变量是用一串固定的字符来标示不固定的值的一种方法 变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更 ...

  5. SHELL中的变量和参数

    $    变量替换操作符. 只有在变量被声明,赋值,unset 或exported 或者是在变量代表一个signal 的时候, 变量才会是以本来的面目出现在脚本里.变量在被赋值的时候,可能需要使用&q ...

  6. Linux Shell中的变量-环境变量

    参考:<Linux命令 / 编辑器与Shell编程> ################################################ note that :与其他编程语言 ...

  7. linux脚本判断变量存在,shell中关于变量是否存在的问题

    [TOC] ## fish shell判断某个变量是否存在 fish shell 判断变量是否存在直接使用 `test 变量`就可以,然后我们使用`and`和`or`实现if..else..的逻辑.如 ...

  8. (2)shell编程学习 Shell中的变量(预设变量表)及变量定义与特殊变量 (脚本小子的进阶之路)

    这里尽量以较简略的篇幅讲解,如果之前有Python PHP语言基础的话,学习应该非常快.当然文章篇幅有限,只能讲一些主要的地方,一些偏的知识可能不讲. 目录 变量 局部变量 环境变量 自定义环境变量 ...

  9. shell中定义变量用双引号和单引号以及不用引号的区别

    1. 单引号 使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出 2. 双引号 如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双 ...

最新文章

  1. 斯坦福大学科学家研发微型植入式神经刺激器
  2. 2021年春季学期-信号与系统-第十五次作业参考答案-第一小题参考答案
  3. js mysql替换_JavaScript_js使用正则实现ReplaceAll全部替换的方法,JS 字符串有replace() 方法。但这 - phpStudy...
  4. ASP.NET那点不为人知的事(四)
  5. Java面试题!Java获取异常堆栈信息
  6. java类函数默认的保护级别_事件说明
  7. html溢出宽度控制,html - 具有固定宽度列的HTML / CSS表(如果内容溢出,则滚动) - 堆栈内存溢出...
  8. bazel 链接第三方动态库_惠州权威信息系统安全检测第三方
  9. Java web后端4 会话 Cookie Session
  10. 10大html5前端框架
  11. 【大数据】0002---MongoDB集群自动分离创建新集群
  12. [POI2001] 和平委员会 Peaceful Commission——2-sat(dfs构造字典序最小解)
  13. NPAPI:JS的Number,在接口中可能是int32,也可能是double
  14. 【病毒分析】——熊猫烧香 专杀工具C源码
  15. android版usb转网线驱动,usb网线转换器驱动下载
  16. ESN学习笔记——echotorch(2)narma10
  17. UE4材质(二):PBR材质
  18. janus demo运行说明
  19. mac移动硬盘初始化
  20. python查询ip归属地_基于Python的免费IP地址归属地查询

热门文章

  1. Windows下 Apache配置虚拟主机
  2. cognos-rs用下拉列表来控制交叉表的显示内容
  3. C#写Windows系统日志(EventLog)
  4. 终于读完Code complete 2nd edtion
  5. 【推荐】本周值得关注的将开源论文,包含分类、分割、人脸、目标检测、ReID等...
  6. 收藏 | 一文看尽2020AI论文
  7. 如何深入理解计算机视觉?(附思维导图)
  8. 计算机网络封装过程图,网络传输过程是怎样的?网络数据传输的过程图解
  9. 还在 Fine-tune 大规模预训练模型? 该了解下最新玩法 Prompt-tuning啦
  10. 点云上的卷积神经网络及其部分应用