env (环境变量)
100%

文本操作 · 第 5 课

env (环境变量)

学习 Bash 如何展开、导出、检查和临时覆盖环境变量。

每个进程都有一个环境,即从父进程继承的一组名称—值字符串。shell 使用环境变量,把语言设置、可执行文件搜索路径等配置传递给它启动的程序。

在 Bash 中展开变量值

Bash 会在运行命令前把 $NAME 或 ${NAME} 展开为变量值。为保留完整值作为一个参数,应给展开式加引号:

$ printf '%s\n' "$HOME"
/home/pete

常见环境变量包括:

  • HOME:当前用户的主目录路径。
  • USER:许多系统的登录环境所提供的用户名。
  • PWD:shell 的当前工作目录。
  • PATH:用于搜索命令名的目录。

值取决于当前进程环境,并不是通用常量。除非启用了更严格的 shell 行为,未设置变量会展开为空字符串。

哪个 Bash 命令会打印 HOME 的值,同时保留它作为一个参数?

检查当前环境

要查看当前为您的会话设置的所有环境变量,您可以使用 env 命令。linux env command 是检查 shell 配置的基本工具。

env

输出由 NAME=value 记录组成,例如:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/bin
PWD=/home/user
USER=pete

环境变量可能包含凭据、令牌、内部路径或其他敏感数据。把完整 env 输出粘贴到公开问题或日志前,必须先审查并遮盖敏感值。

哪个命令会打印新启动进程能够看到的环境?

通过 PATH 查找命令

在您的 env linux 输出中最重要的变量之一是 PATH。您可以使用以下命令专门查看其内容:

$ printf '%s\n' "$PATH"

PATH 是以冒号分隔的目录列表。当命令名不含斜杠时,Bash 会搜索这些目录。

顺序很重要:Bash 会根据名称解析规则使用第一个合适命令。可用 type -a NAME 检查当前 shell 如何解析名称。

要在当前 shell 及其未来子进程中把 /opt/coolapp/bin 加到现有搜索路径前面:

$ export PATH="/opt/coolapp/bin:$PATH"

不要意外用新目录完全替换 PATH,也不要加入不受信任的可写目录。前者可能让正常命令无法解析,后者可能导致运行意外的可执行文件。

哪个命令会在当前 Bash 进程及其未来子进程中,把 /opt/coolapp/bin 加到现有 PATH 前面?

把变量导出给子进程

Bash 变量不会自动成为传给子进程的环境。使用 export 标记要导出的名称:

export TEST=test

当前 Bash 进程现在拥有名为 TEST 的变量,它启动的命令会继承 TEST=test。子进程不能借此改变父进程的环境。

$ printenv TEST
test

该赋值通常持续到取消设置或 shell 退出为止,并不会修改系统级环境。

在 Bash 中,export TEST=test 的主要效果是什么?

为单条命令设置值

把赋值放在命令前,只向该命令的环境提供值:

$ LANG=C sort names.txt

当前 shell 的 LANG 不会永久改变。env 工具也提供另一种显式形式:

$ env LANG=C sort names.txt

使用 env -i COMMAND 可让命令从初始空环境启动,再添加所需赋值。许多程序依赖环境值,因此应谨慎使用。

哪个命令会以 LANG=C 运行 sort names.txt,但不永久改变当前 shell 的 LANG?

在未来会话中加载个人变量

要让未来的交互式 Bash 会话重新创建导出变量,应把合适的 export 行放在这些会话实际读取的启动文件中;对于交互式非登录 Bash,通常是 ~/.bashrc:

export TEST=test

Zsh 通常使用 ~/.zshrc,Fish 则采用不同语法和配置。登录 shell 与非交互式 shell 还可能读取其他文件,因此应先确定 shell 和会话类型,不要假定一个文件能配置所有进程。

要练习环境继承和 shell 配置,可以尝试以下动手实验:

  1. 在 Linux 中管理 Shell 环境和配置 - 练习创建和管理本地变量和环境变量,理解继承,并通过修改 .bashrc 文件使配置持久化。
  2. Linux 中的环境变量 - 学习环境变量的概念和用法,如何创建、修改和管理它们,以及它们在系统配置中的作用。

课程已完成

你已完成 env (环境变量)

现在,你可以检查并控制 Bash 传给子进程的环境。

  • 使用恰当的引号展开变量值。

  • 查看已导出值,同时避免泄露秘密。

  • 保留并排列 PATH 中的命令目录。

  • 导出 shell 变量供未来子进程继承。

  • 为单条命令覆盖值,而不改变父 shell。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 文本操作