shell中的变量与eval(转)
原文链接:http://www.361way.com/shell-eval-variable/4957.html
shell 中经常会用到变量的嵌套的情况。比如,单个或多个变量的值作为变量名,再对该变量名取$获取其内部的变量的情况,这种脚本写起来很难搞,还好有eval 命令方便我们处理这种情况。便于理解,先来一个示例:
- #!/bin/bash
- a='my'
- b='site'
- my_site='my site www.361way.com'
- echo a_b is "$a"_"$b"
- echo $("$a"_"$b")
- web="$a"_"$b"
- echo web is $web
- eval echo '$'"$a"_"$b"
- eval echo '$'{"$a"_"$b"}
比如上面这个示例,猜猜看它的运行结果是什么?执行结果如下:
- # sh a.sh
- a_b is my_site
- a.sh: line 6: my_site: command not found
- web is my_site
- my site www.361way.com
- my site www.361way.com
从上面可以看出$("$a"_"$b")这种写法会报错,可以正确取到我们想要的结果可以有两种写法:eval echo '$'"$a"_"$b" 或 eval echo '$'{"$a"_"$b"} 。
eval 这么神奇,到底是个什么东东?
eval 命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量,该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时被称为复杂变量。eval命令即可以用于回显简单变量,也可以用于回显复杂变量。
再来个示例,该例中文件有两列,第一列为变量名,第二列为变量值,读取该文件后将第二列的值赋值给第一列,通过echo ${第一列列名} 就可以获取后面的value值。如下:
- 变量名与变量值映射表:
- # more name_value.txt
- site www.361way.com
- mail itybku@139.com
- user admin
- 脚本内容:
- # cat b.sh
- #!/bin/bash
- while read NAME VALUE
- do
- eval "${NAME}=${VALUE}"
- done < name_value.txt
- echo "$site $mail $user"
执行该脚本,结果如下:
- # sh b.sh
- www.361way.com itybku@139.com admin
转载于:https://www.cnblogs.com/hubavyn/p/7455235.html
shell中的变量与eval(转)相关推荐
- shell中的变量及运算符
变量赋值与环境 语法 export name[=word] export –p readonly name[=word] readonly –p export用于修改或打印环境变量,readon ...
- 学习linux杂七杂八——关于shell中的变量
var=value 变量定义并赋值,注意等号前后不能与空格相邻,如果需要有空格(其他特> 殊字符,如$,回车,",',\等)可用转义字符\进行转义. 变量命名规则同C语言. 变量值两端 ...
- [转]Shell中脚本变量和函数变量的作用域
转自: http://blog.csdn.net/ltx19860420/article/details/5570902 在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变 ...
- linux——shell 中的变量
变量的定义 变量,即在程序运行过程中它的值是允许改变的量 变量是用一串固定的字符来标示不固定的值的一种方法 变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更 ...
- SHELL中的变量和参数
$ 变量替换操作符. 只有在变量被声明,赋值,unset 或exported 或者是在变量代表一个signal 的时候, 变量才会是以本来的面目出现在脚本里.变量在被赋值的时候,可能需要使用&q ...
- Linux Shell中的变量-环境变量
参考:<Linux命令 / 编辑器与Shell编程> ################################################ note that :与其他编程语言 ...
- linux脚本判断变量存在,shell中关于变量是否存在的问题
[TOC] ## fish shell判断某个变量是否存在 fish shell 判断变量是否存在直接使用 `test 变量`就可以,然后我们使用`and`和`or`实现if..else..的逻辑.如 ...
- (2)shell编程学习 Shell中的变量(预设变量表)及变量定义与特殊变量 (脚本小子的进阶之路)
这里尽量以较简略的篇幅讲解,如果之前有Python PHP语言基础的话,学习应该非常快.当然文章篇幅有限,只能讲一些主要的地方,一些偏的知识可能不讲. 目录 变量 局部变量 环境变量 自定义环境变量 ...
- shell中定义变量用双引号和单引号以及不用引号的区别
1. 单引号 使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出 2. 双引号 如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双 ...
最新文章
- 斯坦福大学科学家研发微型植入式神经刺激器
- 2021年春季学期-信号与系统-第十五次作业参考答案-第一小题参考答案
- js mysql替换_JavaScript_js使用正则实现ReplaceAll全部替换的方法,JS 字符串有replace() 方法。但这 - phpStudy...
- ASP.NET那点不为人知的事(四)
- Java面试题!Java获取异常堆栈信息
- java类函数默认的保护级别_事件说明
- html溢出宽度控制,html - 具有固定宽度列的HTML / CSS表(如果内容溢出,则滚动) - 堆栈内存溢出...
- bazel 链接第三方动态库_惠州权威信息系统安全检测第三方
- Java web后端4 会话 Cookie Session
- 10大html5前端框架
- 【大数据】0002---MongoDB集群自动分离创建新集群
- [POI2001] 和平委员会 Peaceful Commission——2-sat(dfs构造字典序最小解)
- NPAPI:JS的Number,在接口中可能是int32,也可能是double
- 【病毒分析】——熊猫烧香 专杀工具C源码
- android版usb转网线驱动,usb网线转换器驱动下载
- ESN学习笔记——echotorch(2)narma10
- UE4材质(二):PBR材质
- janus demo运行说明
- mac移动硬盘初始化
- python查询ip归属地_基于Python的免费IP地址归属地查询
热门文章
- Windows下 Apache配置虚拟主机
- cognos-rs用下拉列表来控制交叉表的显示内容
- C#写Windows系统日志(EventLog)
- 终于读完Code complete 2nd edtion
- 【推荐】本周值得关注的将开源论文,包含分类、分割、人脸、目标检测、ReID等...
- 收藏 | 一文看尽2020AI论文
- 如何深入理解计算机视觉?(附思维导图)
- 计算机网络封装过程图,网络传输过程是怎样的?网络数据传输的过程图解
- 还在 Fine-tune 大规模预训练模型? 该了解下最新玩法 Prompt-tuning啦
- 点云上的卷积神经网络及其部分应用