本文转载自微信公众号「Linux常用命令」,作者妖生。转载本文请联系Linux常用命令公众号。
面试官:与哪些环境变量相关Shell命令?
答:export、declare、source、env、set/unset。
面试官:它们分别有什么作用?
答:……
正文
export的作用就是设置全局变量,可以在整个Shell环境中被引用。
没有使用export设置的变量,只能在自己的Shell脚本中起作用。我们也可以直接使用【export】命令来查看可以被全局使用的环境变量。
示例如下:
- [root@linuxido ~]# export ## 查看所有export设置的环境变量
- declare -x CLASSPATH=".:/usr/local/java/jdk1.8.0_131/lib:/usr/local/java/jdk1.8.0_131/jre/lib:"
- declare -x DISPLAY="localhost:10.0"
- declare -x GEM_HOME="/usr/local/rvm/gems/ruby-2.7.0"
- …… ## declare 设置环境变量
我们可以看到【declare -x】也等同于【export】,所以定义环境变量的方式基本上有三种,示例如下:
- export JAVA_HOME=/usr/local/java/jdk1.8.0_131 ## 1、【export 变量名=变量值】
-
- PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin ## 2、先设置【变量名=变量值】
- export PATH ## 再设置【export 变量名】
-
- declare -x DISPLAY="localhost:10.0" ## 3、【declare –x 变量名=变量值】
一般在使用export定义过全局变量后,都会使用【source】刷新文件中定义的环境变量,使其档次生效(使用点【.】可达到同样效果)如刷新系统全局变量【source /etc/profile】或刷新用户全局变量【. ~/.bash_profile】。
不用source刷新变量的话则要重新登录才能生效。
env也可以查看环境变量,不同于export,它只查看用户的环境变量。
示例如下:
- [root@linuxido ~]# env ## 查看用户环境变量
- ……
- HOME=/root
- LOGNAME=root
- ……
【set】也可以显示本地用户变量,但是不只是本地用户变量,还包括Shell特有的变量,如BASH_ALIASES 、BASH_ARGC。示例如下:
- [root@linuxido ~]# set
- BASH=/bin/bash
- BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
- BASH_ALIASES=()
- BASH_ARGC=()
- BASH_ARGV=()
- ……
set还有个作用是可以调试脚本,即在Shell中注明【set -x】,详见10.4.2章节。
使用【export】可以临时设置一个环境变量,示例如下:
- [root@linuxido ~]# export LINUX_HOME=linuxido.com ## export设置临时变量
- [root@linuxido ~]# echo $LINUX_HOME ## 打印临时变量值
- linuxido.com
临时消除一个环境变量,使用【unset】,示例如下:
- [root@linuxido /shell]# echo $LINUX_HOME ## 查看临时变量
- linuxido.com
- [root@linuxido /shell]# unset LINUX_HOME ## unset取消临时变量
- [root@linuxido /shell]# echo $LINUX_HOME ## 临时变量已经没有值了
-
- [root@linuxido /shell]##
附录:常用环境变量
在bashrc、profile等环境变量设置文件中,设置了一堆我们常用的环境变量,示例如下:
- [root@ linuxido ~]# echo $SHELL ## 查看当前Shell变量
- /bin/bash
- [root@linuxido ~]# echo $PS1 ## 查看PS1环境变量
- [\u@\h \w]\$\$
- [root@dihuiyuan logs]# echo $PS2 ## 多行命令提示符,也可以更改此变量值为->
- > ## 一个非常长的命令可以通过在末尾加“\”使其分行显示
- [root@dihuiyuan logs]# echo $PS3 ## 默认为空,select循环语句的默认提示
-
- [root@dihuiyuan logs]# echo $PS4 ## bash -x或set -x,调试脚本时输出的命令提示符
- +
- [root@linuxido ~]# echo $HOME ## 查看用户家目录
- /root
- [root@linuxido ~]# echo $USER ## 查看用户
- root
- [root@linuxido ~]# echo $LANG ## 查看是否中文环境
- zh_CN.UTF-8
- [root@linuxido ~]# echo $HISTSIZE ## 查看历史命令条数
- 1000
- [root@linuxido ~]# echo $PATH ## 查看系统环境PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin……
当然,这仅仅是冰山一角,有兴趣的可以查阅相关文件或文档。