Linux环境变量完整学习实操笔记

📅 2026/7/8 4:20:11 👁️ 阅读次数 📝 编程学习
Linux环境变量完整学习实操笔记

一、认识环境变量
环境变量是以变量名=值形式存储数据的键值对,Shell依靠环境变量保存会话、系统运行相关信息,程序、脚本可以快速读取内存中存储的数据。系统自带大量默认环境变量,用来定义终端运行环境,常见自带变量有HOME、PATH、PWD、PS1、UID等。

系统环境变量统一使用大写命名,方便和用户自定义变量区分。bash中环境变量分为两大类:全局环境变量、局部环境变量,二者生效范围存在明显区别。

二、全局变量与局部变量区分实操
2.1 全局环境变量
全局变量对当前Shell以及所有子Shell进程都可见。

  1. 查看全局变量命令
    envprintenv两条命令均可输出全部全局环境变量;单独查看某一个变量可以使用printenv 变量名env | grep 变量名;使用echo $变量名也能打印变量值,引用变量时必须添加美元符号$。

  2. 全局变量可被子Shell继承
    执行bash生成子Shell,子Shell内依旧可以读取HOME、PWD等系统全局变量,父子进程共用同一套全局环境数据。

2.2 局部环境变量
局部变量仅能在创建它的当前Shell进程内使用,子Shell无法读取。没有单独只查看局部变量的命令,set命令可以输出当前进程所有变量,包含局部、全局、自定义变量,并按字母排序。

2.3 自定义局部变量实操
自定义局部变量语法规则:

  1. 变量名、等号、数值之间不能有空格
  2. 字符串包含空格时,使用英文单引号包裹完整内容;
  3. 自定义变量建议小写,避免覆盖系统大写环境变量。

实操流程:

  1. 错误示范:my variable=Hello,变量名带空格,系统识别my为命令直接报错;
  2. 正确定义:my_variable=Hello,当前终端echo可正常输出;
  3. 输入bash进入子Shell,执行echo $my_variable无输出,证明局部变量无法传递给子进程;
  4. exit退出子Shell回到父终端,再次echo变量可以正常打印。

2.4 自定义全局变量实操
局部变量通过export命令导出后,升级为全局变量,所有子Shell均可读取。
实操流程:

  1. 定义局部变量my_variable='Global variable'
  2. export my_variable导出为全局;
  3. bash进入子Shell,echo能够正常读取变量;
  4. 子Shell内重新给变量赋值,仅修改子进程内部数据,exit回到父Shell,变量依旧是原始值,子进程修改不会影响父进程。

2.5 删除自定义变量unset
删除变量命令为unset 变量名,操作变量时不能加$符号,若写unset $my_variable会直接读取变量值执行删除,操作无效。
子Shell内unset变量仅作用于子进程,退出后父Shell变量依旧存在。

2.6 永久保存自定义全局变量
临时export的变量关闭终端就会消失,想要永久生效,写入用户专属启动文件~/.bashrc

  1. vim ~/.bashrc打开配置文件;
  2. 文件末尾添加export my_variable='Hello World'
  3. 保存退出,执行source ~/.bashrc刷新配置,无需重启终端;
  4. 新开终端、创建多层子Shell,变量均可通过env查询到。

三、PATH环境变量详解
PATH是系统核心全局环境变量,存储一系列目录路径,多个目录使用英文冒号分隔。我们输入外部命令时,Shell会按PATH内目录顺序依次检索,找到对应可执行程序运行。

  1. 查看PATH:echo $PATHenv检索PATH字段;

  1. 临时追加自定义目录:export PATH=$PATH:/自定义文件夹路径,仅当前终端生效;
  2. 永久添加自定义目录:编辑~/.bashrc写入PATH追加语句,source刷新配置后永久生效。

四、Shell启动配置文件
登录Linux后bash会自动读取多份启动文件加载环境配置,分为系统级文件与用户专属文件:

  1. 系统全局文件:/etc/profile,所有用户登录都会加载,定义系统公共环境;
  2. 用户私有隐藏文件:~/.bashrc~/.profile~/.bash_login~/.bash_profile
    日常实操主要使用~/.bashrc,每次开启新终端、子Shell都会自动加载文件内的变量、别名配置。
    注意:文件内if判断语法必须if与fi成对,缺失fi会出现语法报错,终端启动异常,补全fi后执行source即可修复。

五、Shell数组变量
数组可以一次性存储多个数据,bash仅支持一维数组,括号()定义数组,元素空格分隔,下标从0开始。

  1. 定义数组:my_test=(one two three)
  2. 读取单个元素:${my_test[下标]}
  3. 读取全部数组内容:${my_test[*]}
  4. 修改指定下标数据:my_test[1]=five
  5. 删除单个元素:unset my_test[1];删除整个数组:unset my_test

数组默认属于局部变量,无法完整导出为全局变量,env命令查询不到数组信息。

六、完整知识总结

  1. 变量分类:全局变量env可查看,子Shell共享;局部变量仅当前终端有效,子进程无法读取,set可查看全部变量;
  2. 自定义变量:赋值等号两侧不能空格,含空格字符串用英文单引号包裹;export导出局部变量为全局;
  3. unset删除变量不加$,临时变量重启终端失效,写入~/.bashrc实现永久环境配置;
  4. PATH控制命令检索目录,可临时、永久追加自定义程序文件夹;
  5. ~/.bashrc为用户终端启动文件,统一配置全局变量、别名,脚本if语句必须搭配fi;
  6. Shell一维数组存储多组数据,支持下标取值、修改、删除,数组不属于全局环境变量。