env export set declare区别

显示

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中内容。


你可能感兴趣的:(env export set declare区别)