Shell eval通过变量获取环境变量的方法实现

场景

  • 系统中存在环境变量 USER=iceber
  • 脚本中存在一个变量 env_name=USER
  • 需要通过变量 env_name 获取到环境变量 USER 的值

错误示例

$ # 环境中已存在环境变量 USER
$ env_name=USER
$ echo ${$env_name}
${$env_name}: bad substitution

很显然,直接使用 $ 嵌套来获取值是行不通的

正确示例

$ # 环境中已存在环境变量 USER
$ env_name=USER
$ eval echo '$'$env_name
icebergu

eval 先将对参数进行变量的替换,然后再将参数作为命令执行

eval echo '$'$env_naem
  • 首先会将 $env_name 替换成 USER,这时会和前边的'$'组成字符串$USER,现在的命令实际已经变成了eval echo $USER
  • 然后 eval 再执行 echo $USER,这样就完成了环境变量的获取

根据上边的解析会发现,命令其实可以写成 eval echo \$$env_name 也是可以的

同理,如果一个变量存的的其他变量的名字,使用 eval 也可以获取到相应变量的值

到此这篇关于Shell eval通过变量获取环境变量的方法实现的文章就介绍到这了,更多相关Shell eval获取环境变量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Shell中eval的用法示例

    功能说明:告知shell取出eval的参数,重新运算求出参数的内容. 语 法:eval [参数] 补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行. 参 数:参数不限数目,彼此之间用分号分开. 1.执行命令行之前扫描它两次,再次运算求出参数的内容. 复制代码 代码如下: [root@localhost blue]# a="ls |more" [root@localhost blue]# $a                                       

  • 谈谈shell中的eval与crontab命令

    eval eval会对后面的命令进行两遍扫描,如果第一遍扫描后,命令是个普通命令,则执行此命令:如果命令中含有变量的间接引用,则保证间接引用的语义.也就是说,eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令.因此,eval命令适用于那些一次扫描无法实现其功能的变量. eval 执行以下两个步骤 第一次,执行变量替换,类似与C语言的宏替代 第二次,执行替换后的命令串 栗子: 1.  有一个名为test的文件,其内容为"Please move on !",定义一个内容是cat

  • Shell eval通过变量获取环境变量的方法实现

    场景 系统中存在环境变量 USER=iceber 脚本中存在一个变量 env_name=USER 需要通过变量 env_name 获取到环境变量 USER 的值 错误示例 $ # 环境中已存在环境变量 USER $ env_name=USER $ echo ${$env_name} ${$env_name}: bad substitution 很显然,直接使用 $ 嵌套来获取值是行不通的 正确示例 $ # 环境中已存在环境变量 USER $ env_name=USER $ eval echo '

  • Linux Shell脚本系列教程(三):变量和环境变量

    一.玩转变量和环境变量 变量是任何一种编程语言都必不可少的组成部分,用于存放各种类型的变量.脚本语言大多是弱类型语言(动态语言),也就是说在使用变量时,不需要事先声明变量的类型,只需要直接赋值就可以.在Bash中,每一个变量的值都是字符串.无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储.有一些特殊的变量会被shell环境和操作系统保留,用来存储一些特别的值,这类变量就称为环境变量,相信大家对环境变量也并不陌生,因为即使在windows操作系统上,也存在环境变量. 二.普通变量 普通变

  • Linux Crontab 获取环境变量配置解析

    使用Laravel分版本环境部署时遇到的问题 Crontab 执行 Laravel 获取不到用户全局变量,通过查阅资料获知 Crontab 载入配置的时候 并未载入 /etc/profile : 针对这个现象 初期解决方式是在Crontab 任务内添加配置文件载入 * * * * * source /etc/profile && php task.php 或 * * * * * export PHP_ENV=prod && php task.php 或 * * * * *

  • 详解Java获取环境变量及系统属性的方法

    环境变量这个概念不陌生, 就是操作系统的环境变量. 系统变量就是java本身维护的变量. 通过 System.getProperty 的方式获取. 对于不同的操作系统来说, 环境变量的处理可能会有一些不统一的地方, 比如说: 不区分大小写 等等. Java 获取环境变量 Java 获取环境变量的方式很简单: System.getEnv()  得到所有的环境变量 System.getEnv(key) 得到某个环境变量的值 Map map = System.getenv(); Iterator it

  • C#设置与获取环境变量的方法详解

    1.前言 本来想拿学校机房的Android编辑器直接粘到自己电脑上用,发现它的eclipse是32位的,而我的JDK是64位的,于是想到干脆装两个JDK,用C#做一个能够更改环境变量的程序 环境变量是包含关于系统及当前登录用户的环境信息的字符串,一些软件程序使用此信息确定在何处放置文件(如临时文件). 环境变量说白了就是指定一个软件的路径,比如说配置TomcatJdk等软件时就必须设置环境变量. 下面话不多说了,来一起看看详细的介绍吧. 2.代码 Environment类下的静态方法 获取环境变

  • Python基于os.environ从windows获取环境变量

    安装python之后,我们往往面临这样一个问题,在命令行输入"python",竟然出错,难道是没有安装成功吗?非也,其实是你的系统环境变量没有设置好.今天,小编就来带大家学学python怎么设置环境变量 问题场景: 写脚本涉及到数据库的配置信息,然后上面要求这种关键信息不能体现到脚本中,哦,那怎么办,那我去哪里读取数据库信息呢? 解决方法: 从运行脚本的机器的环境变量里读取数据库信息,这样脚本中全是代码,就没有明文配置信息了. 具体步骤: 1.先在自己的windows机器上配置好环境变

  • Java获取环境变量(System.getenv)的方法

    目录 简介 常用方法 获得自定义的环境变量 打印所有的环境变量 默认环境变量及其含义 简介 说明 本文用示例介绍Java获得环境变量的方法:System.getenv. System.getenv与System.getProperty的区别 项 属性(System.getProperty) 环境变量(System.getenv) 运行时是否可修改 可以 不可以 有效范围 仅在java平台中有效 系统里所有程序都有效 创建的时机 打包应用时属性必须存在 可以在任何时候创建环境变量 相关网址 Sys

  • Powershell获取环境变量的方法

    Powershell中获取一个Windows环境变量,简单一点就是使用"env:"前缀: 复制代码 代码如下: PS> $env:windir C:\Windows PS> $env:USERNAME Tobias 实际上"env:"是一种驱动,所以你能查询到大多或部分环境变量.下面将显示全部的名字中包含user的环境变量: 复制代码 代码如下: PS> dir env:\*user* Name                          

  • Go获取与设置环境变量的方法详解

    目录 前言 01 从安装 Go 说起 02 Go 如何使用环境变量 03 小结 前言 今天的文章比较基础,但却是必须掌握的,而且本文有些内容,也许你之前没想过.希望这篇文章能够让你理解环境变量并掌握 Go 环境变量相关操作. 01 从安装 Go 说起 其实不止是安装 Go,其他语言一本也会有类似的问题.一般来说,安装完 Go 后,会建议将 go 可执行程序配置到 PATH 环境变量中. 比如我本地的 PATH 环境变量的值: $ echo $PATH /Users/xuxinhua/.go/bi

  • Linux下查看控制环境变量的方法

    查看环境变量 查看某一环境变量:比如我们需要查看HOME这个环境变量,我们可以在shell下直接输入echo $HOME,我们可以把所有的环境变量和环境变量的值都打印出来 打印环境变量 libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以 在使用时 要用extern声明. 下面提供了一个程序打印环境变量 #include<stdio.h> int main() { //libc中定义的全局变量environ指向环境变量表,environ没有包含在任何

随机推荐