显示
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.
2. set
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中内容。