Logo
Section 1 / 12

探索环境变量和Shell变量

学习环境和 shell 变量的基本知识。

导入

探索环境变量和Shell变量

学习环境和 shell 变量的基本知识。

变量分为两种类型:环境变量和 shell 变量。环境变量是在当前 shell 会话中定义的,可供执行的任何程序使用。环境变量通常用于控制程序的行为。例如,我们可以设置一个 LANG 环境变量,让其他程序根据该变量来决定与用户交流时使用的语言。Shell 变量与此类似,但它们仅在当前 shell 中有效,不会传递给程序或子进程。我们可以将环境变量理解为全局变量,而 shell 变量则是局部变量。

环境变量

env 命令可以显示所有已设置的环境变量。由于输出内容较多,我们将其通过管道传给 less 命令进行分页查看:

1$ env | less

请使用下方终端练习这些命令。

Terminal

在输出结果中,可以看到许多环境变量。以下是其中几个变量的作用:

  • USER 和 LOGNAME 变量存储当前用户的用户名。
  • PWD 变量保存当前工作目录的完整路径。
  • TERM 变量定义终端输出模式,终端软件利用它来判断可用的字体、颜色及其他功能。
  • SHELL 变量指定当前使用的 shell。在此情况下,它是位于 /bin/bash 的 Bash shell。
  • HOME 变量存储当前用户主目录的路径。当我们不带参数运行 cd 命令时,就会使用这个值。
  • PATH 变量包含一系列目录,操作系统会按顺序搜索这些目录以定位可执行程序。

Shell 变量

env 命令仅显示环境变量。若要同时查看环境变量和 shell 变量,可以使用 set 命令。该命令会输出 Bash 中的环境变量、shell 变量以及函数,输出内容可能非常庞大,有时并不需要全部查看。

1$ set -o posix; set; set +o posix

请使用下方终端练习这些命令。

POSIX 是一组标准,旨在确保不同操作系统之间的兼容性。

Terminal

上述命令将 set 命令配置为在 POSIX 模式下运行,该模式不会显示函数。然后执行 set 命令,并恢复原始行为。我们可以进一步简化为以下写法:

1$ (set -o posix; set)

请使用下方终端练习这些命令。

Terminal

括号中的语句告诉 Bash 在子进程中执行命令,从而保持当前 shell 的设置不变。这样就不需要手动恢复默认行为。关于子进程的更多内容,请参见 在子进程中运行命令。

遗憾的是,由于 env 和 set 命令的输出方式限制,目前没有简单的方法仅显示 shell 变量。我们只能通过获取 set 的输出,再从中排除 env 返回的内容来实现。

浏览文件系统

使用变量