一篇文章看懂Linux环境变量(局部环境变量、全局环境变量、持久化环境变量)
2021/10/30 7:12:43
本文主要是介绍一篇文章看懂Linux环境变量(局部环境变量、全局环境变量、持久化环境变量),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1 环境变量概述
- 1.1 全局环境变量
- 1.2 局部环境变量
- 2创建环境变量
- 2.1 局部环境变量
- 2.2 全局环境变量
- 3 删除环境变量
- 4 设置PATH环境变量
- 4.1 持久化环境变量
- 4.1.1 情况1:默认登录shell
- 4.1.2 情况2:为非登录shell的交互式shell
- 4.1.3 情况3:为运行脚本的非交互shell
- 4.2 创建持久化环境变量的建议
- 5 数据数组
1 环境变量概述
定义:在内存中存储有关shell会话和工作环境的信息,以便程序或shell中运行的脚本能够轻松访问到它们。
全局环境变量对于shell会话和所有生成的子shell都是可见的;局部变量则只对创建它们的shell可见。
1.1 全局环境变量
- 查看方法:
env
或printenv
命令. - 显示个别环境变量的值,可以使用printenv命令,但是不要用env命令.
- 可以使用echo显示变量的值【下引用某个环境变量的时候,必须在变量前面加上一个美元符($)。】
1.2 局部环境变量
- 查看方法:在Linux系统并没有一个只显示局部环境变量的命令,
set
命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量。
2创建环境变量
2.1 局部环境变量
my_variable=Hello my_variable="Hello World" echo $my_variable
⚠️注意:
- 所有的环境变量名均使用大写字母,这是bash shell的标准惯例。如果是你自己创建的局部变量或是shell脚本,请使用小写字母。变量名区分大小写。在涉及用户定义的局部变量时坚持使用小写字母,这能够避免重新定义系统环境变量可能带来的灾难。
- 变量名、等号和值之间没有空格.
- 如果变量中含有空格的字符串值,则使用双引号包裹起来。
- 命令中单引号、双引号、无引号的区别:
- 单引号:将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么;
- 双引号:如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来
- 无引号:不会将含有空格的字符串视为一个整体输出, 如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出
2.2 全局环境变量
创建方法:先创建一个局部环境变量,然后再把它导出到全局环境中。【子shellexport导出的变量,父shell接收不到】
⚠️注意:
- 修改子shell中全局环境变量并不会影响到父shell中该变量的值。
3 删除环境变量
使用unset命令完成这个操作。【在unset命令中引用环境变量时,记住不要使用$。】
⚠️注意:
如果要用到变量,使用$
;如果要操作变量,不使用$
。这条规则的一个例外就是使用printenv显示某个变量的值。
4 设置PATH环境变量
PATH环境变量定义了用于进行命令和程序查找的目录。
临时添加PATH环境变量:
PATH=$PATH:/home/christine/Scripts
对PATH变量的修改只能持续到退出或重启系统.
4.1 持久化环境变量
linux启动shell时,会从启动文件或环境文件中读取环境变量。
4.1.1 情况1:默认登录shell
- /etc/profile
- $HOME/.bash_profile
- $HOME/.bashrc
- $HOME/.bash_login
- $HOME/.profile
/etc/profile
文件是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。剩余的四个文件【它们是隐藏文件】,提供一个用户专属的启动文件来定义该用户所用到的环境变量,大多数Linux发行版只用这四个启动文件中的一到两个。shell会按照按照下列顺序,运行第一个被找到的文件,余下的则被忽略【$HOME表示的是某个用户的主目录。它和波浪号(~)的作用一样。】:
$HOME/.bash_profile $HOME/.bash_login $HOME/.profile
这个列表中并没有$HOME/.bashrc
文件。这是因为该文件通常通过其他文件运行的。
Ubuntu发行版中环境变量包含在/etc/bash.bashrc
的文件,但是,在的CentOS发行版的/etc/profile文件中,并没有出现这个文件。
注意⚠️:
- 有些Linux 发行版使用了可拆卸式认证模块( Pluggable AuthenticationModules ,PAM)。在这种情况下,PAM文件会在bash shell启动之前处理,这些文件中可能会包含环境变量
4.1.2 情况2:为非登录shell的交互式shell
概念:bash shell不是登录系统时启动的(比如是在命令行提示符下敲入bash时启动),那么你启动的shell叫作交互式shell。
如果bash是作为交互式shell启动的,它就不会访问/etc/profile文件,只会检查用户HOME目录中的.bashrc
文件。
.bashrc文件有两个作用:
- 一是查看/etc目录下通用的bashrc文件,
- 二是为用户提供一个定制自己的命令别名和私有脚本函数(将在第17章中讲到)的地方。
4.1.3 情况3:为运行脚本的非交互shell
概念:系统执行shell脚本时用的就是这种shell。不同的地方在于它没有命令行提示符。
bash shell提供了BASH_ENV环境变量
,当shell启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。如果有指定的文件,shell会执行该文件里的命令,这通常包括shell脚本变量设置。
如果BASH_ENV变量没有设置,由于有些shell脚本是通过启动一个子shell来执行的,子shell可以继承父shell导出过的变量。如果父shell是登录shell,在/etc/profile、/etc/profile.d/*.sh和$HOME/.bashrc
文件中设置并导出了变量,用于执行脚本的子shell就能够继承这些变量。
对于那些不启动子shell的脚本,变量已经存在于当前shell中了,所以就算没有设置BASH_ENV,也可以使用当前shell的局部变量和全局变量。
注意⚠️:如果父shell设置但并未导出的变量都是局部变量,子shell无法继承局部变量。
4.2 创建持久化环境变量的建议
全局环境变量来说(Linux系统中所有用户都需要使用的变量),可能更倾向于将新的或修改过的变量设置放在/etc/profile文件中,但是如果你升级了所用的发行版,这个文件也会跟着更新,那你所有定制过的变量设置可就都没有了。
最好是在/etc/profile.d
目录中创建一个以.sh结尾的文件。把所有新的或修改过的全局环境变量设置放在这个文件中。
在大多数发行版中,存储个人用户永久性bash shell变量的地方是$HOME/.bashrc
文件,适用于所有类型的shell进程。但如果设置了BASH_ENV变量
,那么记住,除非它指向的是$HOME/.bashrc
,否则你应该将非交互式shell的用户变量放在别的地方。
5 数据数组
要引用一个单独的数组元素,就要使用方括号+数值索引值【环境变量数组的索引值都是从零开始】.要显示整个数组变量,可用星号作为通配符放在索引值的位置。
$ mytest=(one two three four five) $ echo $mytest one $ echo ${mytest[2]} three
数组变量的可移植性并不好,如果需要在不同的shell环境下从事大量的脚本编写工作,这会带来很多不便。
这篇关于一篇文章看懂Linux环境变量(局部环境变量、全局环境变量、持久化环境变量)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-18git仓库有更新,jenkins 自动触发拉代码怎么配置的?-icode9专业技术文章分享
- 2024-12-18Jenkins webhook 方式怎么配置指定的分支?-icode9专业技术文章分享
- 2024-12-13Linux C++项目实战入门教程
- 2024-12-13Linux C++编程项目实战入门教程
- 2024-12-11Linux部署Scrapy教程:新手入门指南
- 2024-12-11怎么将在本地创建的 Maven 仓库迁移到 Linux 服务器上?-icode9专业技术文章分享
- 2024-12-10Linux常用命令
- 2024-12-06谁看谁服! Linux 创始人对于进程和线程的理解是…
- 2024-12-04操作系统教程:新手入门及初级技巧详解
- 2024-12-04操作系统入门:新手必学指南