1. env
显示当前系统的环境变量
G_BROKEN_FILENAMES=1 HISTCONTROL=ignoredups HISTSIZE=1000 HOME=/root HOSTNAME=www.nginx.com JAVA_HOME=/usr/java/jdk1.8.0_20 LANG=en_US.UTF-8 LESSOPEN=|/usr/bin/lesspipe.sh %s LOGNAME=root ……
2. export 将环境变量导出
declare -x G_BROKEN_FILENAMES="1" declare -x HISTCONTROL="ignoredups" declare -x HISTSIZE="1000" declare -x HOME="/root" declare -x HOSTNAME="www.nginx.com" declare -x JAVA_HOME="/usr/java/jdk1.8.0_20" declare -x LANG="en_US.UTF-8" declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s" declare -x LOGNAME="root" ……
declare -x 设置环境变量,导出后,可以直接使用。实际上内容与env完全一致。
3. set 显示shell变量、系统变量、用户自定义变量
_= a=4 aspch=123 #用户自定义变量 BASH_ALIASES=() # shell变量 BASH_ARGC=() BASH_ARGV=() BASH=/bin/bash BASH_CMDS=() BASH_LINENO=() HOSTNAME=www.nginx.com #环境变量
4. declare 显示shell变量和当前用户变量
与set显示一致。
1. export
在shell中设置变量,只在该shell进程中可见,而在其它子进程中均不可见。
[root@www ~]# spch=2 [root@www ~]# echo $spch #本进程可见 2 [root@www ~]# bash #新开一个shell子进程 [root@www ~]# echo $spch [root@www ~]# exit exit [root@www ~]# echo $spch 2 [root@www ~]#若在子进程中仍然可见,需要通过export将其设置为环境变量。
[root@www ~]# spch=2 [root@www ~]# export spch [root@www ~]# bash [root@www ~]# echo $spch 2 [root@www ~]#当然,也可以将其组合成一句。即export spch=2.
set [+-abCdefhHklmnpPtuvx] 用来定制shell环境。
-a 标示已修改的变量,以供输出至环境变量。 -b 使被中止的后台程序立刻回报执行状态。 -C 转向所产生的文件无法覆盖已存在的文件。 -d Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 -e 若指令传回值不等于0,则立即退出shell。 -f 取消使用通配符。 -h 自动记录函数的所在位置。 -H Shell 可利用"!"加<指令编号>的方式来执行history中记录的指令。 -k 指令所给的参数都会被视为此指令的环境变量。 -l 记录for循环的变量名称。 -m 使用监视模式。 -n 只读取指令,而不实际执行。 -p 启动优先顺序模式。 -P 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。 -t 执行完随后的指令,即退出shell。 -u 当执行时使用到未定义过的变量,则显示错误信息。 -v 显示shell所读取的输入值。 -x 执行指令后,会先显示该指令及所下的参数。 + <参数> 取消某个set曾启动的参数。参考:https://www.centos.bz/2011/09/linux-set/
3. declare
用于定义变量,比如declare -x spch=2, 直接将spch定义为环境变量;同时,
declare -i a_int 设置a_int为整型。
4. env
相当于拷贝一份shell变量,对某个值进行修改,以这个修改后的副本运行程序;然而原shell变量不受影响。
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
#include <stdio.h> extern char **environ; int main(int argc, char *argv[]) { char **env = environ; while (*env) { printf("%s\n", *env); env++; } return 0; }运行
[root@www ~]# env - PATH=1233 ./a.out PATH=1233只有一个环境变量,值为PATH=123。若仅仅是修改PATH,其余保留,则需要:
[root@www ~]# env PATH=1233 ./a.out
export 即使转换成环境变量,下次登录的时候,依然会消失,所以,需要写入文件中.
在/etc/profile中,export 变量=值。 这样,下次ssh后,系统会执行profile中内容。