围绕以下几个问题来学习export命令:

1.什么是export命令?

2.为什么要用export命令?

3.怎么使用export命令?

1.什么是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时定义这个变量的一个拷贝。这个过程称之为变量输出。
[例]在本例中,变量myfile是在dispfile脚本程序中定义的。然后用export命令将变量myfile输出至任何子shell,例如当执行printfile脚本程序时产生的子shell。printfile脚本程序时产生的子shell。

2.为什么要用export命令?  

   为了是是我们定义一个变量时可以在子shell中被调用,而不需要重复去定义。

3.怎么使用export命令?

  解释:♦Linux export命令用于设置或显示环境变量。

    ♦在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。

  语法:

export [-fnp][变量名称]=[变量设置值]

  参数说明

-f  代表[变量名称]中为函数名称。
-n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p  列出所有的shell赋予程序的环境变量。

实例

列出当前所有的环境变量

[root@localhost ~]# export -p
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES=""
declare -x HISTSIZE=""
declare -x HOME="/home/zszc"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x KDE_IS_PRELINKED=""
declare -x KDE_NO_IPV6=""
declare -x LANG="zh_CN.UTF-8"
declare -x LC_ALL="zh_CN.GBK"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/home/zszc/zpp/weblogic/weblogic103/user_projects/domains/zszc_7008_domain/bin:/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/zszc/bin"
declare -x PWD="/home/zszc"
declare -x QTDIR="/usr/lib64/qt-3.3"
declare -x QTINC="/usr/lib64/qt-3.3/include"
declare -x QTLIB="/usr/lib64/qt-3.3/lib"

定义环境变量;

[root@localhost ~]# export laolao#定义环境变量
[root@localhost ~]# export -p
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES=""
declare -x HISTSIZE=""
declare -x HOME="/home/zszc"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x KDE_IS_PRELINKED=""
declare -x KDE_NO_IPV6=""
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_CLIENT="192.168.113.206 17527 22"
declare -x SSH_CONNECTION="192.168.113.206 17527 192.168.44.33 22"
declare -x SSH_TTY="/dev/pts/1"
declare -x TERM="vt100"
declare -x USER="root"
declare -x a="echo hollo li"
declare -x b="echo hollo qiang"
declare -x c="echo huahua"
declare -x laolao
declare -x test="value1"

定义环境变量赋值

[root@localhost ~]# export laolao=2
[root@localhost ~]# export -p
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES=""
declare -x HISTSIZE=""
declare -x HOME="/home/zszc"
declare -x HOSTNAME="localhost"
declare -x INPUTRC="/etc/inputrc"
declare -x KDEDIR="/usr"
declare -x KDE_IS_PRELINKED=""
declare -x KDE_NO_IPV6=""
declare -x LANG="zh_CN.UTF-8"
declare -x LC_ALL="zh_CN.GBK"
declare -x TERM="vt100"
declare -x USER="root"
declare -x a="echo hollo li"
declare -x b="echo hollo qiang"
declare -x c="echo huahua"
declare -x laolao=""
declare -x test="value1"
[root@localhost ~]#

  ♦得 出的结论是:

    •1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;

    •2、一个shell中的系统环境变量才会被复制到子 shell中(用export定义的变量);

    •3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失 (并不能返回到父shell中)。

    •4、不用export定义的变量只对该shell有效,对子shell也是无效的。

实例:

[root@localhost ~]# vim liqiang.sh
export a='echo hollo li'
b='echo hollo qiang'
./liqiang-3.sh
[root@localhost ~]# vim liqiang-3.sh
echo 看看这里调用几次
echo 调用一次就对了
echo $a
echo $b
bash

输出结果:

[root@localhost ~]# ./liqiang.sh
看看这里调用几次
调用一次就对了
echo hollo li

实例2:在子shell中定义变量,在父shell中调用。

[root@localhost ~]# vim liqiang-3.sh
echo 看看这里调用几次
echo 调用一次就对了
echo $a
echo $b
c='echo huahua'
bash
~
root@localhost ~]# vim liqiang.sh
export a='echo hollo li'
export b='echo hollo qiang'
./liqiang-3.sh
echo $c

运行结果:

[root@localhost ~]# ./liqiang.sh
看看这里调用几次
调用一次就对了
echo hollo li
echo hollo qiang
#c没有被调用
[root@localhost ~]#

实例3:在子shell中用export导出依然不会被父shell调用c

[root@localhost ~]# vim liqiang-3.sh
echo 看看这里调用几次
echo 调用一次就对了
echo $a
echo $b
export c='echo huahua'
bash

运行结果:

[root@localhost ~]# ./liqiang.sh
看看这里调用几次
调用一次就对了
echo hollo li
echo hollo qiang
[root@localhost ~]#

对source这块理解的还不是很清,只知道source把多有的脚本都拉进一个shell中进行执行,只有有一个PID,那这个时候所有的变量都应该是可以随便使用的。

shell与export命令的更多相关文章

  1. Linux从入门到进阶全集——【第十四集:Shell编程-export命令】

    参考: https://www.cnblogs.com/guojun-junguo/p/9855356.html 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量 ...

  2. shell 的 export命令

    export 功能说明:设置或显示环境变量.语 法:export [-fnp][变量名称]=[变量设置值]补充说明:在shell中执行程序时,shell会提供一组环境变量.export可新增,修改或删 ...

  3. linux source命令与export命令的区别

    shell与export命令 用户登录到Linux系统后,系统将启动一个用户shell.在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序.运行shell脚本程序 ...

  4. linux下export命令添加、删除环境变量(转载)

    转自:http://blog.csdn.net/shenshendeai/article/details/49794699 export命令 功能说明:设置或显示环境变量. 语 法:export [- ...

  5. shell export 命令

    export 命令作用是 把变量导出 也可以用export来定义环境变量 导入 定义的变量 这样的话类似于python面向对象的self.变量 一样 在脚本到处调用这个变量

  6. Bash Shell内建命令和保留字

    Bash Shell内建命令和保留字命令含义!保留字,逻辑非:不做任何事,只做参数展开.读取文件并在shell中执行它alias设置命令或命令行别名bg将作业置于后台运行bind将关键字序列与read ...

  7. [置顶] export命令-linux

    export 命令 功能说明: 设置或显示环境变量. 语 法: export [-fnp][变量名称]=[变量设置值] 补充说明: 在shell中执行程序时,shell会提供一组环境变量. expor ...

  8. Shell 脚本常用命令

    Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook.在工作过程中整理了一下,贴在这里已备查看. 1           Shell中的特殊符号 ...

  9. Linux中使用export命令设置环境变量

    Linux export 命令 2011-08-31 22:36:39|  分类: 命令总结|举报|字号 订阅     功能说明:设置或显示环境变量. ######################## ...

随机推荐

  1. Windows下的OpenCVSharp配置

    OPenCvSharp是OpenCV的Net Warpper,应用最新的OpenCV库开发,目前放在github.. 本人认为OpenCvSharp比EmguCV使用起来更为方便,因为函数更接近于原生 ...

  2. asp.net MVC 框架中控制器里使用Newtonsoft.Json对前端传过来的字符串进行解析

    下面我用一个实例来和大家分享一下我的经验,asp.net MVC 框架中控制器里使用Newtonsoft.Json对前端传过来的字符串进行解析. using Newtonsoft.Json; usin ...

  3. springmvc+swagger构建Restful风格文档

    本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...

  4. 托管C++线程锁实现

    最近由于工作需要,开始写托管C++,由于C++11中的mutex,和future等类,托管C++不让调用(报错),所以自己实现了托管C++的线程锁. 该类可确保当一个线程位于代码的临界区时,另一个线程 ...

  5. flash builder 4.6与myecilpse 10.7集成

    一.在flash builder 4.0以后就没有单独提供插件版的flash builder了,因此必须先安装完整版的flash builder,再进行插件集成. 二.集成过程比较简单但也有几个要注意 ...

  6. Dynamic 中修改实体中主字段的长度

    select EntityId,* from MetadataSchema.Entity where Name='dji_incidentaddress' SELECT TOP 100 [Attrib ...

  7. 学HTTP协议所要知道的基础知识(微总结)

    1.网络本质 进行资源共享和信息传输. 2.基于网络的应用程序的本质 就是获取数据和传输数据给用户使用. 3.TCP/IP协议栈工作流程 实体层是不属于TCP/IP协议栈的一层.也就是说TCP/IP协 ...

  8. webpack4:连奏中的进化

    webpack4在2月底的时候发布,这次webpack4有了一个名字"Legato",也就是"连奏"的意思,寓意webpack在不断进化,而且是无缝(no-ga ...

  9. cropper(裁剪图片)插件使用(案例)

    公司发布微信H5前端阵子刚刚弄好的H5端的图片上传插件,现在有需要裁剪图片.前端找了一个插件---cropper 本人对这插件不怎么熟悉,这个案例最好用在一个页面只有一个上传图片的功能上而且只适合单个 ...

  10. PAT1129:Recommendation System

    1129. Recommendation System (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...