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

Linux 环境变量课堂笔记

一、什么是环境变量

1. 基础概念

  1. 环境变量是操作系统 / Shell 提供的键值对变量名=值,用于存储会话、系统配置信息,程序、脚本可直接读取使用。
  2. 作用:在内存持久存储数据,方便 Shell、应用程序调用。
  3. 命名规范:系统自带环境变量全大写;自定义局部变量建议小写,避免覆盖系统变量。

2. 两类环境变量

(1)全局环境变量

作用范围:当前 Shell + 所有子 Shell 都能访问。

查看命令:

env/printenv:只打印全局环境变量

echo $变量名:单独查看某一个变量值(必须加$

示例:

1.分别执行envprintenvset,对比输出差异

env

env

只输出全局环境变量(export 导出的变量、系统全局变量)

格式:变量名=值

不输出函数、局部自定义变量、Shell 内置临时变量

printenv

功能和env几乎完全一致,同样只打印全局环境变量

额外用法:可单独查询单个变量printenv HOME

输出内容、行数和 env 几乎无差别

set

输出全部内容:全局变量 + 局部自定义变量 + Shell 函数 + Shell 内置临时变量

输出内容远多于 env/printenv,行数最多

会打印你当前会话定义的局部变量、脚本函数等临时内容

2.父 Shell 查看 $PWD,进入子 Shell 再次查看,验证全局变量继承。

二、自定义用户变量

1. 创建局部变量(仅当前 Shell 生效)

语法规则:变量名=值

  1. 等号两侧不能有空格
  2. 值包含空格时,用单 / 双引号包裹;
  3. 子 Shell 无法读取局部变量,退出终端变量直接消失。 示例:

练习:父 shell 定义局部变量,进子 shell 查看;子 shell 定义局部变量,退出后父 shell 查看,均无法读取。

2. 创建全局变量(子 Shell 也可访问)

步骤:先定义局部变量 →export导出为全局

my_var="全局变量测试" export my_var bash # 进入子shell echo $my_var # 子shell可读取 my_var="修改值" # 子shell修改变量 exit echo $my_var # 父shell值不变,子shell修改不影响父shell

核心特点:子 Shell 修改全局变量,仅在自身内部生效,不会向上覆盖父 Shell 的变量值。

三、删除环境变量

命令:unset 变量名注意:操作变量时 ** 不加 $**;读取变量时才加 $。 示例流程:

  1. 父 shell 导出全局变量export test=123
  2. 进入子 shell,unset test,子 shell 中变量消失
  3. exit 退回父 shell,变量依然存在
  4. 父 shell 执行unset test,变量彻底删除

练习步骤:

  1. 子 shell 读取父 shell 全局变量
  2. 子 shell unset 删除变量
  3. 退出子 shell,父 shell 变量仍存在
  4. 父 shell 执行 unset,变量彻底清除

四、系统默认 Shell 环境变量

1. 传统 Bourne 内置变量

表格

变量作用
CDPATHcd 命令的搜索目录(冒号分隔)
HOME当前用户家目录
IFS字段分隔符
MAIL用户邮箱文件路径
MAILPATH多邮箱文件列表
OPTARG / OPTINDgetopts 命令专用参数

2. Bash 独有扩展变量

表格

变量作用
BASH当前 bash 程序完整路径
PWD当前工作目录
UID用户数字 ID
HOSTNAME主机名
LINES终端可见行数
GROUPS当前用户所属用户组数组

五、PATH 环境变量(重点)

1. 作用

Shell 输入命令时,自动在 PATH 内的目录查找可执行程序;目录用冒号:分隔。 查看 PATH:

2. 临时添加自定义目录

如果脚本所在目录不在 PATH,无法直接运行;可临时追加目录:

⚠️ 缺点:临时生效,重启终端 / 系统后失效。

配套练习

  1. 编写hello.sh脚本;
  2. 不修改 PATH,直接运行,提示命令不存在;
  3. 追加目录到 PATH 后,可直接运行;
  4. 重启终端,再次执行脚本失效;
  5. 权限不足时添加执行权限:chmod u+x hello.sh

六、环境变量配置文件(永久生效配置)

登录 Shell 启动时,会按固定顺序读取配置文件,写入变量可永久生效。

1. 系统级全局配置(所有用户生效)

/etc/profile

系统所有用户登录都会加载;

内部会循环加载/etc/profile.d/*.sh下所有脚本;

适合配置全用户共用环境变量。

2. 用户级专属配置(仅当前用户生效)

登录时按优先级依次查找,找到第一个就停止读取:

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile上述文件内部一般会主动加载~/.bashrc(终端交互配置)。

使用技巧

把自定义环境变量、PATH 配置写入上述文件,新开终端自动生效; 立即生效不用重启:source 配置文件

七、数组变量

环境变量支持数组,可存储多个值,下标从 0 开始。

1. 数组定义与读取

2. 修改、删除数组

数组练习

  1. 创建存储组员姓名的数组;
  2. 修改其中一位成员;
  3. 删除一名成员;
  4. 彻底删除整个数组。

本章小结

  1. Linux 环境变量分为全局变量(父子 shell 共享)、局部变量(仅当前 shell);
  2. export将局部变量提升为全局,unset删除变量;
  3. PATH 控制命令搜索路径,临时修改重启失效,写入配置文件永久生效;
  4. Shell 登录时自动加载/etc/profile、用户家目录下.bash_profile/.profile等配置文件;
  5. 环境变量支持数组,通过下标存取多组数据。
http://www.jsqmd.com/news/1141283/

相关文章:

  • AI 刷题提示评估:提示越少,越能看出真实能力
  • 【本地 AI 自动化工具】 OpenClaw v2.7.9 完整搭建教程,Windows 与 Mac 双端实操流程(含安装包)
  • 如何在嵌入式系统中轻松实现USB功能:CherryUSB完整指南
  • Transformer多因子分析框架:黄金为何重新进入美联储定价周期?智能因子预测模型
  • SaaS软件拓客外呼机器人是什么?企业如何挑选外呼系统?
  • STM32F072RB与25CSM04 EEPROM的SPI数据存储方案
  • Java毕设项目:基于 SpringBoot 的工业设备运行统计分析系统的设计与实现 基于 SpringBoot+Vue 的工厂设备报修审批系统 (源码+文档,讲解、调试运行,定制等)
  • OpenCV 4.8 实战:6种图像清晰度评价算法对比与Python实现(附完整代码)
  • Rust AI CLI 工具链实战:把模型调用、文件操作和日志熔断串起来
  • 本地部署AI工具全攻略:从Ollama到Dify的实战指南
  • 埃氏筛与欧拉筛 Python 3.11 性能实测:10^7 数据量下耗时差 5 倍
  • 解决AI输出格式问题的工具库Pydantic
  • 第9篇:ONNX Runtime推理实现 — 备用推理引擎方案
  • STC3115电池监控芯片与STM32G431RB的协同设计
  • 当网格的子代终于有了自己的骨架:CSS Grid Subgrid 在复杂表单布局中的实战突围
  • Minecraft基岩版启动器实战:全方位管理多个游戏版本与个性化配置
  • 156、LangChain LCEL 表达式语言:用管道语法构建可流式、可异步的 Chain
  • 随机森林特征重要性分析:3种方法对比与医疗诊断数据集实战
  • 如何永久保存微信聊天记录:WeChatMsg的完整备份与数据分析指南
  • EM3080-W条形码扫描模块与PIC18F87J50的工业级应用解析
  • 抖音无水印下载神器:新手也能轻松批量保存精彩内容
  • 骨架条件化:让世界模型适配任意机器人形态
  • SPT-AKI Profile Editor终极指南:轻松掌控离线塔科夫存档
  • Paperxie 毕业论文智能写作|和学姐唠唠一站式写论文神器,再也不用熬大夜改稿
  • AI学习机技术拆解:从OCR、TTS到知识图谱,看教育硬件的真实价值
  • OceanBase 湖库一体AI 数据库正式发布(技术解析与实践)
  • 计算机毕业设计之基于jsp面相集散中心管理系统
  • 【计算机Java毕业设计案例】基于 SpringBoot 的工业设备维修工单管理系统的设计与实现 基于 SpringBoot 的智能制造设备管理系统(程序+文档+讲解+定制)
  • 抖音内容收藏革命:解锁无水印批量下载与智能管理的终极解决方案
  • 什么是IP地址、子网掩码、网关、DNS,零基础也能看懂