1 export
1.1 shell与export关系
登录Linux后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。
在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。
1.2 列出所有环境变量
export -p
1.3 例子
本例,bash脚本依次调用顺序为:a.sh -> b.sh -> c.sh。
# ==================== a.sh ==================== #!/bin/bash FALSEC_MAVEN_SERVER=http://192.168.1.166:8081 DOCKER_REPO_URL=192.168.1.166:8083 export DOCKER_REPO_URL ./b.sh # ==================== b.sh ==================== #!/bin/bash echo '[b shell] DOCKER_REPO_URL:' $DOCKER_REPO_URL echo '[b shell] FALSEC_MAVEN_SERVER:' $FALSEC_MAVEN_SERVER ./c.sh # ==================== b.sh ==================== #!/bin/bash echo '[c shell] DOCKER_REPO_URL:' $DOCKER_REPO_URL echo '[c shell] FALSEC_MAVEN_SERVER:' $FALSEC_MAVEN_SERVER # ==================== 结果 ===================== [admin@localhost images]$ ./a.sh [b shell] DOCKER_REPO_URL: 192.168.1.166:8083 [b shell] FALSEC_MAVEN_SERVER: [c shell] DOCKER_REPO_URL: 192.168.1.166:8083 [c shell] FALSEC_MAVEN_SERVER:
1.4 结论
- 要想将变量传递到子shell,必须用 export。
- shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失 (并不能返回到父shell中)