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

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

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

指针猎手发布于 2026/3/22更新于 2026/9/262 浏览
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 内建命令

更多推荐文章

查看全部
  • 2026年跨端框架怎么选:Flutter、RN、uni-app、KMP的实战对比
  • 基于 MCP 与 Skill 的前端 JS 逆向自动化方案
  • OpenClaw 开源 AI Agent 框架:架构解析与实战指南
  • 网络安全工程师面试真题整理(116 道)
  • Java 后端 HTTP 请求(GET/POST)传输规范
  • 开源知识库 RAGFlow 从部署到实战操作详解
  • Git 安装与配置指南:Windows 环境下的完整步骤
  • DeepSeek 与通义万相结合制作 AI 视频实战指南
  • 基于 Scrapling 为 AI Agent 配置网页爬虫技能指南
  • 京东营销前端:业务理解与技术架构实践
  • Qt Creator 集成 GitHub Copilot AI 辅助编程插件配置指南
  • 基于 RAG 技术的 AI 知识库构建与智能升级指南
  • AI 智能体研发之路 - 工程篇(二):Dify 智能体开发平台一键部署
  • AI 辅助游戏开发:基于 DeepSeek 构建高性能贪吃蛇
  • 使用 DeepSeek 构建贪吃蛇游戏:从环境搭建到功能扩展
  • Deep Java Library:Java 开发者实现 AI 功能的框架
  • SpringAI 集成 Ollama 与 Deepseek 构建本地对话机器人 (二)
  • AI 时代产品经理核心工作流与提示词工程实践
  • 使用 Ollama、Open WebUI 和 Docker 本地部署可视化 AI 大语言模型
  • 前端反爬分析:基于环境日志补全 Window 对象缺失属性

相关免费在线工具

  • 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