当前位置: 首页 > news >正文

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一维数组存储多组数据,支持下标取值、修改、删除,数组不属于全局环境变量。

http://www.jsqmd.com/news/1145440/

相关文章:

  • Kaggle 竞赛入门:从 Titanic 到 House Prices 的 5 步通用工作流
  • Verity 3D80-000906-V6 传感器
  • nvitop监控
  • Go-Spring 项目概览
  • OpenRGB:一站式解决RGB设备控制混乱的终极方案
  • AI技术前沿动态简报(2026.07.07)
  • MapGIS DataStore关系型数据库PGXL的创建与使用
  • 隐形助力,精准解码:云克隆ELISA试剂盒如何支撑ACS Nano心肌梗死纳米酶研究
  • Android Content URI构造陷阱:26.4.9不是版本号而是故障指纹
  • 模型驱动创作全链路梳理:2026上半年图像与视频生成AI模型全景盘点
  • 井盖智能监控系统提升城市生命线运维响应速度
  • 计算机毕业设计之家长教育系统的设计与实现
  • llama.cpp CPU多线程原理与调优实战
  • LoRa 无线对讲机-LoRa语音模块(TMK02-B)- 模块没有回复
  • 3步解锁Switch潜能:TegraRcmGUI图形化注入工具完整实战指南
  • 如何3步搞定抖音无水印视频下载:douyin-downloader终极指南
  • Agent多轮交互批量回归测试:从理念到工程落地
  • UID、CUID、FUID、MF1 卡 4 种类型对比:鼎博梯控系统兼容性与风险分析
  • 2026仓库文员学数据分析的价值
  • 拒绝通宵赶论文!7款AI写作辅助平台1天实现毕业流程全通关
  • Python神经网络编程(一):预测器、分类器与神经网络基础概念
  • 树莓派4B图形栈深度拆解:Wayland+labwc vs eglfs 全链路实战
  • 人脉圈广的亚太EMBA|2026综合实力TOP5权威评测榜单
  • VR遥操作中的碰撞感知与毫秒级触觉反馈系统
  • 证书管理耗时 80%?TLS Connect 自动化运维帮你减负
  • 操作系统期末速成(二)
  • 深度解析:DeepEval SummaC模型实战指南 - 5步构建专业级文本一致性检测系统
  • 新员工看不懂装配图?三维动画直接演示怎么装
  • 生命涌现的小龙虾技能之【Pet Body Condition Score 3D Analysis | 宠物体态3D评分(BCS)】简介
  • captcha-killer-modified 0.24.7 + ddddocr:BurpSuite 2024 验证码绕过实战,成功率85%实测