加载变量的linux命令,Linux-shell笔记--环境变量

什么是环境变量

环境变量是描述系统运行环境的一系列变量,如PATH描述了应该去哪里查找命令,SHELL描述了默认的shell是哪个。

加载环境变量

当一个shell启动时会从某个文件读入环境变量,例如bash的环境变量就和~/.bashrc 文件密切相关。

普通变量

书上把shell里面的变量分为全局和局部,站在环境变量的角度,以我的理解我把shell里面的变量分为两种,普通变量和环境变量

我们在bash里面定义一个变量newvar看看它是否和环境变量性质一样

$set newvar 8

$echo $newvar

8

定义变量之后,使用env这个命令查看环境变量,发现自己定义的变量并不包含在里面。这说明自己定义的变量和环境变量并不是一样的,他们是两种不同的变量。

两种变量的比较

两种变量都可以被set和unset,即被创建和删除

比如,我们尝试unset掉HOME这个环境变量

$echo $HOME

/home/user

$unset $HOME

$echo $HOME

我们发现HOME这个环境变量已经成功地被unset了。但是如果你此时另开一个shell你会发现这个HOME又回来了,这不难理解,因为shell每次启动都是从文件加载环境变量,而unset操作只是把导入shell里面的变量删除掉,而不会对导入环境变量的文件进行操作。

从属关系

环境变量属于当前shell及其子进程

比如你可以在~/.bashrc 文件里自己加上一个变量myvar=9,那么bash启动时myvar就被加载成了环境变量,然后在bash里面再开一个bash,你会发现你放进文件里的myvar也会在子shell进程里。

但是这里有个问题,你怎么知道子进程里的myvar是从它的父进程shell来的还是从文件来的?这个问题后文变量转换的时候可以解决。

普通变量只属于当前shell进程

普通变量不会出现在子shell进程中,如果想要它存在与子shell进程,需要将其转换成环境变量。

相关操作

env

env //显示当前环境变量

env -i NAME=value COMMAND

env -u NAME COMMAND

-i 参数表示不带环境变量启动,COMMAND是命令,可以是脚本或程序等

-u 参数表示从环境变量里面删除一个变量,然后运行COMMAND

更多命令去问男人吧man env

Talk is cheap. Show me the code!

user@myzone ~>env //显示全部,内容太多,略去

user@myzone ~>set a 5

user@myzone ~>echo $a

5

user@myzone ~>env -i PATH=mypath echo.sh

mypath

user@myzone ~>export a //将a设置为环境变量,详见下文

user@myzone ~>fish //这是子shell进程

user@myzone ~>echo $a

5

user@myzone ~>env -u a fish //子shell进程里面又开了一个shell进程

user@myzone ~>echo $a

user@myzone ~>exit

user@myzone ~>exit

echo.sh是自己写的一个脚本,功能是显示PATH的值

#!/bin/sh

echo $PATH

可以看到运行echo.sh 时PATH已被env修改

a是子shell里面的环境变量,env 加-u之后将其删除,所以在孙子shell(姑且这么说吧哈哈)就不存在a这个变量了

export

将一个变量a变成环境变量,但是只对子进程起作用,子进程中的a和PATH等环境变量无差别即如果再有子进程,a也是会被传递到子进程的,记住上文说的只有两种变量。有了这个命令我们就可以解释上文从属关系里面的问题了

user@myzone ~>set val 3

user@myzone ~>export val //转换成环境变量

user@myzone ~>fish //子shell进程

user@myzone ~>echo $val

3

由于export将val转换成了环境变量,子shell里面也有这个val,而文件里面没有val这个变量,因此子shell里的val是从调用它的那个shell来的

set/unset/echo

三个命令都比较简单,且看名字就知道是干嘛的,不详细叙述了。需要注意的是,不同的shell命令可能会不同,如fish没有unset 而有set -e 也没有NAME=VALUE 这种定义变量的写法,而只能set NAME VALUE ,具体区别,RTFM吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值