linux环境变量自定义环境变量

shell中的变量可以简单分为环境变量和自定义变量。环境变量有时也被称为全局变量,它是操作系统为Shell事先定义的一组变量,这些变量共同描述了当前shell运行的系统环境;而自定义变量则是用户根据所需而定义的变量,它也被称为局部变量。自定义环境变量可以为局部的也可为全局的,为了区分两者的不同,环境变量通常用大写字母表示,而自定义变量通常使用小写子母表示。

1. 环境变量
环境变量是一组变量的集合,它们描述了当前shell运行的环境信息。最典型的环境变量即为PATH,它描述了可执行文件的路径信息。通过env命令可以查看当前shell环境下所有环境变量及其对应的值。


env

下面对部分环境变量做以解释:

HOME:表示当前用户的主目录。当输入cd或cd ~命令时,就会用到这个变量,如果更改了这个变量的值,那么使用上述命令的结果也会相应的改变。

SHELL:表示当前的shell环境所使用的shell程序。常见的shell程序有/bin/bash和/bin/sh,Linux中默认使用的是/bin/bash。

PWD:shell当前所在的工作目录,这个变量的值是通过pwd命令得到的。

USER:当前的用户名。

2. 自定义变量
shell除了环境变量,还包括用户自定义的变量。env命令查看的只是所有环境变量,而set命令既可以查看环境变量也可以查看自定义变量。


set

3. 环境变量和自定义变量之间的转换
环境变量在Linux下的shell程序默认为bash,因此每一个bash其实都是一个进程,在当前bash下输入ps命令则可以查看该bash的PID。对于环境变量而言,每个bash进程都可以对其进行引用;而对于用户自定义的变量,只有对其定义的bash进程可以引用它,其他的bash进程甚至是其子进程均不可以引用。这也是环境变量和自定义变量的的主要区别之一。

从进程内存映像的结构分布可以很好的解释环境变量和自定义变量之间的差异。在Linux系统中,所有的bash进程都是gnome-terminal进程的孩子或孙子,而gnome-terminal进程是由init进程创建的,由于环境变量保存在gnome-terminal进程的数据段,因此它的孩子或孙子(即Bash进程的孩子)均可以继承数据段的数据,即所有bash进程都可以访问环境变量。对于自定义变量而言,它位于每个bash进程的栈中,而每个进程它都有自己独立的段,因此自定义变量是不能被继承的,即自定义变量不能被其他bash进程引用。

那么,环境变量和自定义变量之间如何相互转换呢?通过export命令和declare命令即可完成。如果要将一个自定义变量转化为环境变量,示例如下:


NAME=name1
export NAME
env | grep NAME

此时会看到NAME已经成为环境变量,但是是局部的,换个终端便查不到NAME,设置为全局的可以在/etc/profile中进行设置: export NAME=name1
如果要将环境变量转化为自定义变量,则需使用下述命令:


declare +x NAME
env | grep NAME  

此时不会再显示NAME
关于exprot和declare命令更多的用法,可以参考man手册。

现在正在做系列视频课程,课程中会提供视频中涉及的操作文档、软件包,系列课程内容更加完整、贴近实际工作。欢迎感兴趣的小伙伴到网易云课堂进行学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值