如何在Linux中设置和列出环境变量

时间:2020-02-23 14:38:59  来源:igfitidea点击:

在Linux中,环境变量是动态命名值,该值用作命令行应用程序使用的系统中存储信息的占位符。
就像任何其他变量一样,它由两个部分是名称和关联值组成。

以下是快速查看变量的格式:

KEY=value
KEY="this is also a value"
KEY=valueA:valueB

几件事要注意:

  • 在"="符号之前或者之后,不应存在空间。
  • 如果值包含白色空间,则使用引号。
  • 我们可以将多个值分配给变量。每个值必须用冒号(:)字符分隔。
  • 变量的名称区分大小写。因此,"键"和"键"表示两个不同的变量。按照惯例,应在上述情况下写入环境变量。

使用环境变量,我们可能会自定义系统的工作原理,包括系统上安装的应用程序的行为。

例如,我们可以使用环境变量来存储有关文本编辑器,浏览器或者甚至是可执行文件的路径等默认应用程序的信息。
这允许我们根据个人需求或者一组用户的需求来修改系统。

环境变量和shell变量之间有什么区别?

在我们开始之前,让我们首先了解环境变量与shell变量之间的差异。

要简单地说出,"环境变量"是全局可用的,并由任何生成的子进程或者shell 都继承。

另一方面,shell变量是仅适用于当前shell实例的变量。
Bash,ZSH和所有其他炮弹都有自己的一组内shell 变量。
这些通常用于跟踪临时相关数据,如当前工作目录。

现在,我们可以将shell变量作为环境变量提供。
我们需要做的就是使用"导出"命令以及变量名称。
这将在全球范围内导出其值,以便新的程序和子屏幕现在可以使用它。

这是如何完成的例子:

将shell变量导出到环境变量

我们将在后续部分中更深入地进入这一点。

如何列出和设置环境变量

有很多命令可用于列出和设置变量。
以下是快速查看我们在本教程中使用的一些最常见的命令:

  • export:用于导出新分配的环境变量的值。
  • env:用于在自定义环境中运行另一个程序,而无需修改当前的程序。它可以与参数一起使用以打印shell中所有当前环境变量的列表。
  • printenv:用于打印所有(或者指定)环境变量和当前环境的定义。
  • set:用于分配或者定义环境或者shell变量。如果在没有参数的情况下使用,它将打印所有变量的列表,这包括环境变量,shell变量和shell函数。
  • unset:用于删除指定的环境或者shell变量。

使用这些命令,我们将能够在Linux系统上列出和设置环境变量。

列表环境变量

用于显示环境变量的最常用命令是"printenv"。

如果使用变量的名称作为命令的参数,则它将显示变量的值。
但是,如果在没有参数的情况下使用,它将列出系统上的所有环境变量。

这里有一些例子:

假设我们希望看到"主页"环境变量的值。
为此,我们需要运行以下命令:

$printenv HOME

这将为我们提供当前登录用户的路径:

家庭变量的值

我们还可以通过"printenv"命令用两个或者更多个参数,如下所示:

$printenv PWD LANG

我们将获得类似的输出屏幕:

PWD和LANG变量的价值

现在,如果我们在没有参数的情况下运行"printenv",那么它将显示所有环境变量的列表。

所有环境变量的列表

现在,printenv和env命令只显示环境变量。
但是,如果我们想列出系统上的所有变量,该怎么办?
这包括从环境变量开始到shell变量甚至shell函数的所有内容。

嗯,那么你可以使用没有任何参数的"set"命令:

所有变量列表

正如我们在图像中看到的,该命令将显示所有变量的大冗长列表。
如果要递送输出,则可以使用此命令(而不是:

$set | less

除此之外,如果要打印shell变量的值,还可以使用echo命令。
只需输入回声和将有关shell变量传递为其参数。
以下是一个例子,使用它与bash_version变量。

shell变量的值

为了在系统上尝试这些命令,这是一些最多命令环境变量的列表。

  • EDITOR(编辑器)在终端中执行编辑器时要使用的默认文件编辑器。
  • home当前用户的主目录。
  • lang当前的本地环境设置。
  • logname当前用户的名称。
  • ls_colors定义了用于将可选的彩色输出添加到LS命令的所有颜色代码。这些颜色用于区分不同的文件类型并使输出更容易消化。
  • "邮件"了当前用户电子邮件存储的位置。
  • "路径"执行命令时要搜索的目录列表。运行命令时,系统将以列出的顺序搜索这些目录,并使用第一个找到的可执行文件。
  • PWD当前工作目录的位置。
  • oldpwd上一个工作目录的位置。
  • shell当前用户shell 的路径,例如bash或者zsh。
  • term当前的终端仿真。
  • "用户"登录用户的当前。

现在让我们谈谈如何设置环境变量。

设置环境变量

创建环境变量的常见做法是制作shell变量,然后将其导出为环境变量。

现在要创建一个新的shell变量,我们使用以下命令:

MY_VAR=theitroad

我们现在可以使用echo命令来验证变量是否设置了提供的值。

$echo $MY_VAR

同样,使用printenv查看变量是否是环境变量。
如果没有,我们将获得一个空的输出。

$printenv MY_VAR

此外,检查是否使用以下命令由子shell继承变量:

$bash -c 'echo $MY_VAR'

其中我们将获得一个空的输出,如下图所示:

设置shell变量

现在我们已经设置了my_var shell变量并验证了它,我们可以使用export命令将其设置为环境变量。

$export MY_VAR

完成后,我们可以使用上一个命令查看它是否列为环境变量,并查看它是否由子shell继承。

设置环境变量

我们还可以使用单行设置环境变量,如下所示:

$export NEW_VAR="This is a new variable"

但是,请注意以这种方式创建的环境变量仅适用于当前会话。
注销或者打开新shell后,环境变量将丢失。

持久和非持久环境变量

如前所述,当我们在当前shell中修改环境变量时,从shell注销时,它将丢失。
这被称为非持久环境变量。

要使它们持久,或者换句话说,永久性,我们需要编辑Bash配置文件。

启动新会话时,将从以下文件中读取所有环境变量。
因此,我们可以将环境变量添加到这些文件中以使其持久。

  • /etc/environment:此文件包含所有系统范围的环境变量。我们可以使用以下格式添加新的变量:
$FOO=bar
$MY_VAR=theitroad
  • /etc/profile:此文件包括输入BASH登录shell时加载的变量集。我们可以使用导出命令在此文件中声明一个环境变量。
$export JAVA_HOME="/path/to/java/home"
$export PATH=$PATH:$JAVA_HOME/bin
  • 我们还可以在每个用户shell特定配置文件中设置环境文件。例如,如果我们使用的是Bash,则可以使用以下命令声明~/.bashrc内的变量:
$export PATH="$HOME/bin:$PATH"

要在当前shell会话中加载新的环境变量,我们需要使用源命令,如下所示:

$source ~/.bashrc

通过这些步骤后,即使从shell注销,我们刚添加的所有环境变量也将成为永久性,并将保持完整。