0

0

如何在Linux中查看环境变量 Linux env与export区别

P粉602998670

P粉602998670

发布时间:2025-09-05 08:36:01

|

763人浏览过

|

来源于php中文网

原创

查看环境变量应使用printenv或env命令,export用于将变量导出为环境变量以供子进程继承。printenv专门列出所有环境变量,输出简洁,也可查看特定变量如printenv PATH;env功能类似,但更强大,可在临时修改的环境中执行命令,如env -i创建干净环境或env VAR=value command临时设置变量;export不用于查看,而是将局部变量转为环境变量,使其在子进程中生效,如export MY_VAR="hello"。三者核心区别在于:printenv和env用于“查看”,env还能临时修改环境执行命令,而export用于“导出”变量扩大作用域。实际使用中,printenv适合快速查看,env适合隔离测试,export用于配置持久化环境变量。

如何在linux中查看环境变量 linux env与export区别

在Linux中查看环境变量,最直接的方式是使用

printenv
env
命令。它们会列出当前会话中设置的所有环境变量。而
export
命令则不是用来“查看”的,它的核心作用是将一个变量提升为环境变量,使其能被子进程继承,这正是它与
env
printenv
最本质的区别所在。简单来说,
env
printenv
是看“有什么”,
export
是决定“谁能用”。

要查看Linux中的环境变量,我们有几种常用且各有侧重的方法。

首先,最常用的莫过于

printenv
。直接在终端输入
printenv
,它会干净利落地列出所有当前已定义的环境变量及其对应的值。我个人更偏爱这个命令,因为它输出通常更简洁,只显示环境变量。

printenv

如果你想查看某个特定的环境变量,比如

PATH
,可以这样:

printenv PATH

其次是

env
命令。不带任何参数执行
env
,其效果与
printenv
非常相似,也会列出所有当前的环境变量。但
env
的另一个强大之处在于,它可以在一个隔离的环境中执行命令。比如,你想在一个不带任何现有环境变量的干净环境中运行一个程序,就可以这样:

env -i your_command

或者,你只想在执行某个命令时临时设置一个或几个变量,而不影响当前shell环境:

env MY_VAR="hello" your_command

这在调试或者测试脚本时非常有用,避免了全局污染。

最后,

export
命令。正如前面所说,
export
不是用来“查看”所有环境变量的,但它确实可以查看当前shell中被标记为“导出”的变量。单独输入
export
,它会列出所有已经导出(即成为环境变量)的变量。你会发现,很多时候它的输出和
env
printenv
是重叠的,因为它显示的是那些“准备好”被子进程继承的变量。

export

export
最核心的用途是,当你定义了一个shell变量后,需要它被后续启动的子进程访问时,就必须用
export
将其“导出”为环境变量。比如:

my_local_var="我只是个局部变量"
echo $my_local_var # 可以显示

export my_env_var="我现在是环境变量了"
echo $my_env_var # 也能显示

# 启动一个子shell看看
bash
echo $my_local_var # 空,因为没导出
echo $my_env_var # 可以显示,因为导出了
exit # 退出子shell

所以,查看环境变量,我通常会先用

printenv
快速扫一眼。如果需要更细致的隔离测试,
env
就派上用场了。而
export
更多是用于管理和设置变量,而不是纯粹的“查看”。

Linux环境变量究竟是什么,以及它们为何如此关键?

说白了,环境变量就是一些存储在操作系统环境中的动态命名值。它们就像是系统给各个程序和进程提供的一张“便签”,上面写着一些配置信息或者路径,告诉程序“去哪里找东西”、“用什么语言显示”、“你的家在哪里”等等。比如,我们经常遇到的

PATH
变量,它就是一串目录路径的列表,系统通过它来查找你输入的命令。当你敲下
ls
,系统就会挨个去
PATH
里定义的目录里找
ls
这个可执行文件。如果找不到,你就会看到
command not found

为什么它们如此重要?想象一下,如果没有环境变量,每个程序都需要硬编码它所依赖的路径、配置,甚至用户偏好。这不仅会使得程序变得僵硬,难以移植,而且每次修改配置都可能需要重新编译或修改大量文件。环境变量提供了一个灵活、标准化的机制,让程序能够适应不同的运行环境和用户配置。

举个我自己的例子,我经常需要在不同的项目中使用不同版本的Python。如果我只是把Python的可执行文件路径硬编码到我的脚本里,那每次切换项目都得改。但通过修改

PATH
或者设置
PYTHONHOME
这样的环境变量,我就可以轻松地在不同Python版本之间切换,而我的脚本或IDE只需要读取这些环境变量就知道该用哪个Python解释器了。这大大提升了工作效率和项目的可维护性。它们是系统与应用程序之间沟通的桥梁,也是实现系统灵活配置和个性化定制的关键。

env
命令在Linux中扮演什么角色,它和
printenv
有什么不同?

env
命令在Linux中主要扮演两个角色:一是显示当前环境变量,二是在修改后的环境中执行命令

当你不带任何参数运行

env
时,它的行为几乎与
printenv
一模一样,都是列出当前shell会话中所有已设置的环境变量。从这个角度看,它们的功能是重叠的,都可以用来“查看”环境变量。我个人感觉,
printenv
在纯粹的“查看”功能上可能更直接一些,因为它没有其他复杂的选项,就是打印环境变量。

然而,

env
的独特之处在于它的第二个角色:环境修改器。你可以用它来临时设置、取消设置或清空环境变量,然后在这个修改后的环境中执行一个命令。这在调试、测试或者需要隔离环境运行程序时非常有用。

比如,我想测试一个脚本在没有

LD_LIBRARY_PATH
变量时的行为:

MiroThinker
MiroThinker

MiroMind团队推出的研究型开源智能体,专为深度研究与复杂工具使用场景设计

下载
env -u LD_LIBRARY_PATH my_script.sh

或者,我希望在一个完全干净的环境中运行一个程序,不带任何继承自当前shell的环境变量(除了系统强制的一些):

env -i my_program

甚至,我可以临时给一个程序设置一个特定的变量值:

env DEBUG_MODE=true my_application --config /path/to/config.ini

printenv
则没有这些“执行命令于修改环境”的能力。它就是个纯粹的“打印机”。所以,如果你只是想看看当前有哪些环境变量,两者皆可;但如果你需要更高级的环境控制,
env
显然是更强大的工具。我经常在写自动化脚本或者容器化应用时用到
env
的这些特性,它能帮助我确保程序的运行环境是可控且一致的。

export
命令是如何改变环境变量的作用域的,它和
env
的主要区别在哪里?

export
命令的核心作用在于改变变量的作用域,将一个普通的shell变量提升为环境变量,使其能够被当前shell及其启动的所有子进程所继承。这听起来有点抽象,但实际上非常关键。

在Linux的shell中,当你定义一个变量时,比如

my_var="hello"
,这个变量默认只在当前这个shell会话中有效。它是一个“局部变量”。如果你在这个shell里启动一个子shell(比如再敲一个
bash
命令),或者运行一个脚本,这个子进程是无法直接访问到
my_var
的。

export
命令就是来打破这个“局部性”的。当你执行
export my_var
之后,
my_var
就不再仅仅是当前shell的局部变量了,它被“导出”成了环境变量。这意味着,任何由当前shell启动的子进程(包括子shell、脚本、其他程序等)都将自动继承
my_var
的值。

举个例子来理解作用域:

  1. 当前shell (父进程):

    VAR_LOCAL="我只在父shell里"
    export VAR_EXPORT="我能被子进程继承"
    echo "父shell中 - VAR_LOCAL: $VAR_LOCAL"
    echo "父shell中 - VAR_EXPORT: $VAR_EXPORT"

    输出:

    父shell中 - VAR_LOCAL: 我只在父shell里
    父shell中 - VAR_EXPORT: 我能被子进程继承
  2. 启动一个子shell (子进程):

    bash
    echo "子shell中 - VAR_LOCAL: $VAR_LOCAL"
    echo "子shell中 - VAR_EXPORT: $VAR_EXPORT"
    exit # 退出子shell

    输出:

    子shell中 - VAR_LOCAL:
    子shell中 - VAR_EXPORT: 我能被子进程继承

    你看,

    VAR_LOCAL
    在子shell中是空的,因为它没有被导出。而
    VAR_EXPORT
    则成功地被子shell继承了。

export
env
的主要区别在于:

  • 目的不同:

    • export
      的目的是改变变量的作用域,将局部变量提升为环境变量,使其能被子进程继承。它是一个“声明”或“标记”动作。
    • env
      的目的是显示当前环境变量,或者在一个修改过的环境中执行命令。它是一个“查询”或“临时修改执行”动作。
  • 对变量的持久性影响:

    • export
      一旦执行,被导出的变量就会成为当前shell及其所有未来子进程的环境变量,直到当前shell会话结束或变量被显式
      unset
    • env
      对环境的修改是临时且局部的,只对它所执行的那个命令有效。一旦命令执行完毕,
      env
      所做的环境修改就会消失,不会影响到父shell或后续的其他命令。

在我日常工作中,

export
是配置开发环境不可或缺的工具。比如,设置
JAVA_HOME
M2_HOME
(Maven的家目录)或者一些自定义的API密钥,都需要
export
来确保我的IDE、构建工具或脚本能够正确地找到它们。而
env
则更多用于一次性的测试或隔离运行,两者虽然都与环境变量相关,但其设计哲学和应用场景是截然不同的。理解这一点,对于管理Linux环境下的程序行为至关重要。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

0

2025.09.15

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1415

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

706

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

295

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

782

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

575

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

550

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

300

2023.07.20

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

0

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.1万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号