作者丨良许 来源丨良许Linux(ID:liangxuxiansheng) 大家好,我是良许。 大家都知道,在 Linux 系统中,有环境变量和 Shell 变量这两种变量。 环境变量是在程序及其子程序中全局可用的,常常用来储存像默认的文本编辑器或者浏览器,以及可执行文件的路径等等这样的信息。而 Shell 变量仅在当前 Shell 中可用,可以用来存储当前用户的 ID 等信息。 那么什么是环境变量,什么是 Shell 变量,该如何设置和查看这两种变量呢? 接下来,让良许为你解答: 环境变量是以键值对的形式实现的,是在整个系统范围内都可用的变量,并由所有派生的子进程和 Shell 继承。而环境变量的名称是区分大小写的,且通常以大写的形式命名 ( MYVAR1, MYVAR2... ) 单个值的环境变量看起来是这样的: KEY=value1 如果你想要将多个值赋予环境变量,则通常用冒号 ( : ) 作为分隔符。每一对键值对最终看起来是这样子的: KEY=value1:value2:value3 如果要赋予环境变量的值包含空格,则需要使用引号: KEY='value with spaces' Shell 变量是专门用于设置或定义它们的 Shell 中的变量。每个 Shell ,例如 zsh 和 bash ,都有一组自己内部的 Shell 变量。它们通常用于跟踪临时数据,比如当前工作目录,而用法则与环境变量相同。 如果你想让 Shell 变量作为全局变量使用,可以使用 $ export MYVAR=lxlinux.net$ echo $MYVARlxlinux.net$ env | grep MYVARMYVAR=lxlinux.net 一些环境变量和 Shell 变量是非常有用的,并且经常会被引用。以下是一些常见的,你以后可能会遇到的环境变量:
除了以上这些环境变量,你也可能会经常遇到以下这些 Shell 变量:
在 Linux 系统中,有以下几种命令可以让你查看环境变量:
默认状态下, $ printenv SSH_CONNECTION=10.0.2.2 37182 10.0.2.15 22 LESSCLOSE=/usr/bin/lesspipe %s %s LANG=C.UTF-8 XDG_SESSION_ID=5 USER=alvin MYVAR=lxlinux.net PWD=/home/alvin HOME=/home/alvin SSH_CLIENT=10.0.2.2 37182 22 XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop SSH_TTY=/dev/pts/0 MAIL=/var/mail/alvin TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LOGNAME=alvin 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 只有在更具体的功能上才能体现出 $ printenv SHELL/bin/bash$ printenv HOME/home/alvin$ printenv MYVARlxlinux.net
env MYVAR=lxlinux.net command_to_run command_options
$ setBASH=/bin/bashBASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepathBASH_ALIASES=()BASH_ARGC=()BASH_ARGV=()BASH_CMDS=()BASH_COMPLETION_VERSINFO=([0]='2' [1]='8')BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=([0]='4' [1]='4' [2]='20' [3]='1' [4]='release' [5]='x86_64-pc-linux-gnu')BASH_VERSION='4.4.20(1)-release'COLUMNS=140DIRSTACK=()EUID=1000GROUPS=()HISTCONTROL=ignorebothHISTFILE=/home/alvin/.bash_historyHISTFILESIZE=2000HISTSIZE=1000HOME=/home/alvinHOSTNAME=ubuntu-bionicHOSTTYPE=x86_64IFS=$' \t\n'LANG=C.UTF-8LESSCLOSE='/usr/bin/lesspipe %s %s'LESSOPEN='| /usr/bin/lesspipe %s'LINES=35LOGNAME=alvin..... 该命令将显示一个包含所有变量的大列表,因此你可能会希望将输出传递给 $ set | less Linux 系统中可以设置环境变量的命令有以下几种:
为了更好地理解 Shell 变量和环境变量之间的区别,我们先从设置 Shell 变量开始讲,然后再讲环境变量。 先从在当前会话中定义一个 Shell 变量开始: $ MYVAR=lxlinux 你可以用 $ echo $MYVAR lxlinux 使用 $ printenv MYVAR 没有输出返回,这就意味着 MYVAR 变量并不是环境变量。
$ export MYVAR 你可以用以下语句检验: $ printenv MYVARlxlinux 当然,你也可以只用一行代码来设置环境变量: $ export MYNEWVAR='My New Variable' 但是以这种方式创建的环境变量只能用于当前会话,如果你打开一个新的 Shell 会话,或者退出登陆,所有的变量都将会丢失。 我们也可以将环境变量还原为 Shell 变量,或者将其完全删除: MYVAR 变量被定义为环境变量,我们可以通过输入以下代码将其还原为 Shell 变量: $ export -n MYVAR 这样,MYVAR 变量就不再是环境变量了,但依然还是 Shell 变量。 无论是 Shell 变量还是环境变量,想要完全删除变量,都可以使用 $ unset MYVAR 可以通过以下语句来验证 MYVAR 变量已经删除: $ echo $MYVAR 由于变量已经删除了,所以没有任何返回。 许多程序都需要使用环境变量来决定具体的执行方式,但是,我们并不希望每次启动新的 Shell 会话时都必须重新设置重要的变量,因此我们需要将重要的环境变量写入配置文件中。 Shell 会话有不同的启动方式,比如,连接到终端的交互式 Shell 与未连接到终端的非交互式 Shell,还有登录式 Shell 与非登录式 Shell, 而 bash Shell 会根据会话不同的启动方式而读取不同的配置文件。 但是,在大多数 Linux 发行版中,当你启动一个新的 Shell 会话时,一般都会从以下文件中读取环境变量:
如果要将新的环境变量加载到当前的 Shell 会话中,可以使用source命令: $ source ~/.bashrc 如果你想要设置环境变量,你就可以考虑将其添加到 |
|