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

评论 0 浏览 0 2019-04-10

在Linux和基于Unix的系统中,环境变量是一组动态命名值,存储在系统中,由shell或子shell中启动的应用程序使用。简单地说,环境变量是一个有名称和相关值的变量。

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

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

环境变量和Shell变量

变量有以下格式:

KEY=value
KEY="Some other value"
KEY=value1:value2
  • 变量的名称是区分大小写的。按照惯例,环境变量的名称应该是大写字母。
  • 当给变量分配多个值时,它们必须用冒号:字符隔开。
  • 在等号=的周围没有空格。

变量可以分为两大类,环境变量和shell变量。

环境变量是全系统可用的变量,所有生成的子进程和shell都会继承这些变量。

shell变量是只适用于当前shell实例的变量。每个shell,如zshbash,都有自己的内部shell变量

有几个命令可以让你在Linux中列出和设置环境变量:

  • env - 该命令允许你在自定义环境中运行另一个程序,而不修改当前环境。在没有参数的情况下使用,它将打印出当前环境变量的列表。
  • printenv - 该命令打印所有的或指定的环境变量。
  • set - 该命令设置或取消设置shell变量。当使用时没有参数,它将打印所有变量的列表,包括环境和shell变量,以及shell函数。
  • unset - 该命令删除了shell和环境变量。
  • export - 该命令设置了环境变量。

列表中的环境变量

最常用的显示环境变量的命令是printenv。如果变量的名称作为参数传给了命令,则只显示该变量的值。如果没有指定参数,printenv会打印出所有环境变量的列表,每行一个变量。

例如,如果要显示HOME环境变量的值,你可以运行:

printenv HOME

输出将打印出当前登录的用户的路径:

输出

/home/linuxize

你也可以向printenv命令传递一个以上的参数:

printenv LANG PWD

输出

en_US
/home/linuxize

如果你在没有任何参数的情况下运行printenvenv命令,它将显示所有环境变量的列表:

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 - 当前用户的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和环境变量之间的区别,我们将从设置Shell变量开始,然后转向环境变量。

要创建一个名称为MY_VAR、数值为Linuxize的新的shell变量,只需键入:

MY_VAR='Linuxize'

你可以通过使用echo $MY_VARgrep set | grep MY_VAR过滤set命令的输出来验证变量是否被设置了:

echo $MY_VAR

输出

Linuxize

使用printenv命令来检查这个变量是否是环境变量:

printenv MY_VAR

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

你也可以尝试在一个新的shell中打印这个变量,你会得到一个空的输出结果。

bash -c 'echo $MY_VAR'

export命令是用来设置环境变量的。

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

export MY_VAR

你可以通过运行来检查这一点:

printenv MY_VAR

输出

Linuxize

如果你这次试图在一个新的shell中打印这个变量,你会得到打印在终端机上的变量名称:

bash -c 'echo $MY_VAR'

输出

Linuxize

你也可以在单行中设置环境变量:

export MY_NEW_VAR="My New Var"

以这种方式创建的环境变量只在当前会话中可用。如果你打开一个新的shell或者你注销了,所有的变量都会丢失。

持久性环境变量

为了使环境变量持久化,你需要在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
  • 每个用户的shell特定配置文件。例如,如果你使用Bash,你可以在~/.bashrc中声明变量:

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

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

source ~/.bashrc

总结

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

如果你有任何问题,请随时留言评论。

最后更新2023-09-24
0 个评论
标签