跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

Linux 环境变量详解:概念、操作与代码获取

综述由AI生成Linux 环境变量的基本概念与作用,包括环境变量如何帮助系统定位可执行程序及库文件。文章阐述了 PATH 变量的机制,以及 Bash 进程如何通过配置文件(.bashrc/.bash_profile)管理环境变量表。此外,还列举了 PWD、HOSTNAME、HOME 等常见环境变量,并演示了如何在 Shell 中使用 env、export、unset 等命令进行操作。最后,通过 C/C++ 代码示例展示了三种在程序中获取环境变量的方法:main 函数参数、getenv 函数以及 environ 全局变量,并区分了本地变量与环境变量、内建命令与普通命令的区别。

指针猎手发布于 2026/3/22更新于 2026/5/3129 浏览
Linux 环境变量详解:概念、操作与代码获取

Linux 环境变量详解

基本概念

环境变量(Environment Variables)是一种动态命名值,用于影响操作系统及其运行程序的行为。环境变量可以在系统层面存储信息,使得不同的程序和进程能够共享和访问这些信息。

在安装软件时通常需要配置相应的环境变量,例如安装 Python 时可能需要通过环境变量找到相关工具;在编写 C/C++ 代码链接动态或静态库时,编译器依赖环境变量查找库文件位置。

命令行参数

在认识环境变量之前,先了解命令行参数。C/C++ 程序中 main 函数是入口,它会被调用并接收参数。在 Linux 中,_start 函数作为第一个执行的函数去调用 main 函数。

main 函数的常见签名如下:

#include <stdio.h>

int main(int argc, char *argv[], char *env[]) {
    return 0;
}
  • argc:整数,代表 argv 中元素的个数。
  • argv:指针数组,指向一个个字符串,即命令行参数。

示例代码:

#include <stdio.h>

int main(int argc, char *argv[], char *env[]) {
    for (int i = 0; i < argc; i++) {
        printf("argv[%d]: %s\n", i, argv[i]);
    }
    return 0;
}

运行结果会显示程序名及后续参数。命令行参数本质上是长字符串,执行时被以空格为分隔符切分填入 argv,数组有效元素个数为 argc,且以 NULL 结尾。

命令行参数是由 bash 来切分的。

认识环境变量

执行自己的程序通常需要加 ./,而执行系统命令可以直接使用程序名。这是因为系统中存在环境变量,帮助系统找到目标二进制文件。

默认情况下,执行命令不会在当前路径下查找,而是搜索环境变量 PATH 中指定的路径。系统命令通常存放在 /usr/bin/ 目录下,该路径包含在 PATH 变量中。

查看环境变量的方法:

env

查看特定环境变量内容:

echo $NAME

PATH 的值由多个绝对路径组成,路径之间以 : 隔开。执行命令时,操作系统按顺序在 PATH 中的路径查找。若未找到则报错 command not found。

修改 PATH 变量(临时生效):

export PATH=$PATH:/your/path

直接赋值会覆盖原有值,导致系统命令失效。建议追加路径。退出登录后变量恢复原状。

理解环境变量

环境变量由 bash 保存和管理。登录时系统创建 bash 进程,从配置文件读取环境变量信息,在内部形成环境变量表(指针数组)。

环境变量最初来自系统配置文件。用户家目录下的 .bashrc 和 .bash_profile 是常见的配置文件。.bash_profile 通常会加载 .bashrc,其中包含系统环境变量值的加载逻辑。

每个登录用户对应一个 bash 进程,各自构建独立的环境变量表。

常见的环境变量

  • PWD:当前工作目录的完整路径,随目录变化自动更新。
  • HOSTNAME:计算机的主机名。
  • HISTSIZE:Shell 命令历史记录的最大条目数。
  • LOGNAME:用户登录系统时使用的用户名。
  • USER:当前登录用户。
  • SHELL:当前使用的命令行解释器路径(如 /bin/bash)。
  • HOME:用户的主工作目录,cd ~ 即替换为此值。
  • PATH:指定命令的搜索路径。

相关操作

  • echo $NAME:查看具体的环境变量值。
  • env:查看所有环境变量。
  • unset [name]:取消某一个环境变量。
  • export [key-value]:导入新的环境变量。

在代码中获取环境变量

1. main 函数的参数

main 函数的第三个参数 env 即为环境变量表,由父进程传递。env 是以 NULL 结尾的指针数组。

#include <stdio.h>

int main(int argc, char *argv[], char *env[]) {
    (void)argc;
    (void)argv;
    for (int i = 0; env[i]; i++) {
        printf("env[%d]: %s\n", i, env[i]);
    }
    return 0;
}
2. getenv 函数

使用标准库函数 getenv 根据名称获取环境变量值。

#include <stdio.h>
#include <stdlib.h>

int main() {
    char *value = getenv("PATH");
    if (value == NULL)
        return 1;
    printf("PATH->%s\n", value);
    return 0;
}
3. environ 全局变量

environ 是 libc 中定义的全局变量,指向环境变量表,需使用 extern 声明。

#include <stdio.h>

extern char **environ;

int main() {
    for (int i = 0; environ[i] != 0; i++) {
        printf("environ[%d]->%s\n", i, environ[i]);
    }
    return 0;
}

变量和内建命令

7.1 变量

Shell 中可直接定义本地变量,仅在当前 bash 内部使用,不可被子进程继承。

7.2 内建命令

export、echo、cd、history 等属于内建命令(built-in command),不需要创建子进程,由 bash 直接执行。


本文介绍了 Linux 环境变量的基本概念、管理方式以及在代码中的获取方法。掌握这些知识有助于更好地进行系统编程和环境配置。

目录

  1. Linux 环境变量详解
  2. 基本概念
  3. 命令行参数
  4. 认识环境变量
  5. 理解环境变量
  6. 常见的环境变量
  7. 相关操作
  8. 在代码中获取环境变量
  9. 1. main 函数的参数
  10. 2. getenv 函数
  11. 3. environ 全局变量
  12. 变量和内建命令
  13. 7.1 变量
  14. 7.2 内建命令
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • xsimd 实战指南:从零开始掌握 C++ SIMD 编程
  • 前端高频面试题:TypeScript 核心考点与实战解析
  • AI 入局避坑指南:普通人如何理性参与大模型技术浪潮
  • 零样本分类 WebUI 操作指南与结果可视化
  • 通义千问插件在 IDEA 中的 Java 开发实战应用
  • 安路科技 TD 开发工具全流程使用指南
  • 腾讯混元图像模型 2.1 开源:支持 2K 分辨率与双语指令
  • Telegram 搜索机器人推荐:高效查找海量资源
  • 英伟达 GTC 2026 发布新一代推理芯片与 Rubin 架构
  • stable-diffusion-webui 照片艺术化风格迁移指南
  • 双指针算法详解:三数之和与四数之和
  • yfinance Python 库深度解析与实战指南
  • LLM 大模型技术实战:Prompt 提示工程策略与技巧总结
  • Tauri 2.0 桌面开发实战:基于 Rust 与 Vue3 构建轻量级股票监控工具
  • C++ 继承机制详解:从基础到菱形继承优化
  • Visual Studio 配置 C++ OpenCV 环境实战指南
  • Web3 入门:从比特币到以太坊智能合约
  • Java 多线程进阶:线程安全与单例模式
  • CVPR 2026 Oral实测|YOLO-DRONE:无人机低空巡检的“性能天花板”,小目标召回率狂升39%(清华团队力作,电力部署实操全解析)
  • Xilinx FPGA ISERDES 使用详解

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online