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

在基于Linux和Unix的系统中,环境变量是一组动态的命名值,存储在系统内,供在外壳程序或子外壳程序中启动的应用程序使用。 简而言之,环境变量是具有名称和关联值的变量。

环境变量使您可以自定义系统的工作方式以及系统上应用程序的行为。 例如,环境变量可以存储有关默认文本编辑器或浏览器,可执行文件的路径或系统区域设置和键盘布局设置的信息。

在本指南中,我们将说明如何读取和设置环境变量和shell变量。

环境变量和Shell变量

变量具有以下格式:

KEY=value
KEY="Some other value"
KEY=value1:value2
  • 变量名称区分大小写。 按照约定,环境变量应具有大写名称。
  • 将多个值分配给变量时,它们必须用冒号分隔 : 字符。
  • 等号周围没有空格 = 符号。

变量可分为两大类,环境变量和外壳变量。

环境变量 是在整个系统范围内可用的变量,并由所有产生的子进程和外壳程序继承。

外壳变量 是仅适用于当前shell实例的变量。 每个壳如 zshbash,具有自己的内部shell变量集。

有几个命令可用来在Linux中列出和设置环境变量:

  • env –该命令允许您在自定义环境中运行另一个程序,而无需修改当前程序。 当不带参数使用时,它将打印当前环境变量的列表。
  • printenv –该命令将打印所有或指定的环境变量。
  • set –该命令设置或取消设置外壳变量。 当不带参数使用时,它将打印所有变量的列表,包括环境和Shell变量以及Shell函数。
  • unset –该命令删除外壳程序和环境变量。
  • export –该命令设置环境变量。

列出环境变量

显示环境变量最常用的命令是 printenv。 如果将变量名作为参数传递给命令,则仅显示该变量的值。 如果未指定任何参数, printenv 打印所有环境变量的列表,每行一个变量。

例如,要显示 HOME 您将运行的环境变量:

printenv HOME

输出将显示当前登录用户的路径:

/home/linuxize

您还可以将多个参数传递给 printenv 命令:

printenv LANG PWD
en_US
/home/linuxize

如果您运行 printenv 要么 env 不带任何参数的命令,它将显示所有环境变量的列表:

printenv

输出将如下所示:

LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35;...
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=en_US
S_COLORS=auto
XDG_SESSION_ID=5
USER=linuxize
PWD=/home/linuxize
HOME=/home/linuxize
SSH_CLIENT=192.168.121.1 34422 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SSH_TTY=/dev/pts/0
MAIL=/var/mail/linuxize
TERM=xterm-256color
SHELL=/bin/bash
SHLVL=1
LANGUAGE=en_US:
LOGNAME=linuxize
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
LESSOPEN=| /usr/bin/lesspipe %s
_=/usr/bin/printenv

以下是一些最常见的环境变量:

  • USER -当前登录的用户。
  • HOME -当前用户的主目录。
  • EDITOR -要使用的默认文件编辑器。 这是您键入时将使用的编辑器 edit 在您的终端中。
  • SHELL -当前用户外壳程序的路径,例如bash或zsh。
  • LOGNAME -当前用户的名称。
  • PATH -执行命令时要搜索的目录列表。 运行命令时,系统将按此顺序搜索这些目录,并使用找到的第一个可执行文件。
  • LANG -当前的语言环境设置。
  • TERM -当前的终端仿真。
  • MAIL -当前用户邮件的存储位置。

printenvenv 命令仅打印环境变量。 如果要获取所有变量的列表,包括环境,shell和变量以及shell函数,则可以使用 set 命令:

set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()

该命令将显示所有变量的较大列表,因此您可能希望将输出通过管道传递到 less 命令。

set | less

您也可以使用echo命令来打印shell变量。 例如,要打印 BASH_VERSION 您将运行的变量:

echo $BASH_VERSION
4.4.19(1)-release

设置环境变量

为了更好地说明Shell和Environment变量之间的区别,我们将从设置Shell Variables开始,然后继续到Environment变量。

用名称创建一个新的shell变量 MY_VAR 和价值 Linuxize 只需键入:

MY_VAR='Linuxize'

您可以使用以下任一方法来验证该变量是否已设置 echo $MY_VAR grep过滤set命令的输出的过程 set | grep MY_VAR

echo $MY_VAR
Linuxize

使用 printenv 检查此变量是否为环境变量的命令:

printenv MY_VAR

输出将为空,这告诉我们该变量不是环境变量。

您也可以尝试在子外壳程序中打印变量,您将得到一个空输出。

bash -c 'echo $MY_VAR'

export 该命令用于设置环境变量。

要创建环境变量,只需将shell变量导出为环境变量:

export MY_VAR

您可以通过运行以下命令进行检查:

printenv MY_VAR
Linuxize

如果这次尝试在子外壳中打印变量,则将在终端上显示变量名称:

bash -c 'echo $MY_VAR'
Linuxize

您还可以在一行中设置环境变量:

export MY_NEW_VAR="My New Var"

以这种方式创建的环境变量仅在当前会话中可用。 如果打开新的外壳程序或注销,所有变量将丢失。

持久性环境变量

为了使环境变量持久化,您需要在bash配置文件中定义这些变量。 在大多数Linux发行版中,当您开始新的会话时,将从以下文件中读取环境变量:

  • /etc/environment -使用此文件来设置系统范围的环境变量。 该文件中的变量以以下格式设置:

    FOO=barVAR_TEST="Test Var"
  • /etc/profile -每当输入bash登录shell时,都会加载此文件中设置的变量。 在此文件中声明环境变量时,您需要使用 export 命令:

    export JAVA_HOME="/path/to/java/home"export PATH=$PATH:$JAVA_HOME/bin
  • 每用户外壳程序特定的配置文件。 例如,如果您使用的是Bash,则可以在 ~/.bashrc

    export PATH="$HOME/bin:$PATH"

要将新的环境变量加载到当前的shell会话中,请使用 source 命令:

source ~/.bashrc

结论#

在本指南中,我们向您展示了如何设置和列出环境变量和shell变量。

如有任何疑问,请随时发表评论。

终奌站

Sidebar