文末有详细举例说明 export命令用于设置或显示环境变量。 在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。同时,重要的是,export的效力仅仅是该次登录操作。注销或者重新开一个窗口,export命令给出的环境变量都不存在了。 语法 export [-fnp][变量名称]=[变量设置值] 其中: -f:代表[变量名称]中函数名称。 -n:删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 -p:列出所有的shell赋予程序的环境变量。 你可以只打出export来查看当前的所有环境变量。如果你要在某个环境变量(比如 PATH)中加入一些新的路径(如/bin/bash),可以使用如下命令格式 export PATH=/bin/bash:$PATH 就OK了。
像sh,bash,./命令是用来执行shell脚本的,用例如下:
bash filename sh filename ./filename这三种形式都是用来打开一个子shell来读取并执行FileName中命令。运行一个shell脚本会启动另一个命令解释器。每个shell脚本有效地运行在父shell(parent shell)的子进程里。这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程。shell脚本也可以启动他自己的子进程。这些子shell(即子进程)使脚本并行地,有效率地同时运行脚本内的多个子任务。略有不同的是:在bash/sh命令下,filename文件可以无“执行权限”,即没有rwx中的x权限。而对于./命令,filename文件必须要有执行权限。
作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无“执行权限”。该命令通常用命令“.”来替代。 source(或点)命令通常用于重新执行刚修改的初始化文档。source命令(从C Shell而来)是bash shell的内置命令。 而点命令,就是个点符号,(从Bourne Shell而来)。 source的程序主体是bash,脚本中的$0变量的值是bash。
export的用法 荔汁一: 简历一个shell脚本var1.sh,其内容为:
cat -n var1.sh !#/bin/bash echo :$myvar然后再终端上执行变量复制语句并用echo显示此变量:
myvar=hello echo $myvar hello但是当执行var1.sh脚本,想显示myvar变量时,情况却并非所愿: bash ./var1.sh :: 显然,var1.sh并没有看到用户在终端中定义的myvar变量。可见,在终端中设置的变量,在运行的shell脚本中是无法看到的。
荔汁二 建立一个脚本var2.sh,内容为:
cat -n var2.sh #!/bin/bash myvar=50 echo :$myvar;此时,用户在终端设置myvar的值并显示此值,然后再运行var2.sh,看结果:
myvar=100 echo $myvar 100 bash var2.sh :50:可见,终端中设置的值,在shell脚本中是无法改变的;而且,终端也无法改变shell脚本里面设置的变量的值。
阶段总结: 在shell工作机制中,存在一个子shell的概念,上面的两个情景展现的就是子shell的形象。子shell是登录shell为了运行某个脚本程序而建立的一个全新的shell,这个全新的shell只会使用自己的局部变量,对父shell(登录shell)的局部变量不屑一顾。而且,子shell和父shell对对方的局部变量都不会有任何冒犯,井水不犯河水。
引子: 有些事情骗骗是需要子shell和父shell有所交互的,这就需要有一个变量是子shell和父shell都能看到和修改的。这时候,export出现了,他可以“导出变量”。 荔汁三:建立一个新的shell脚本var3.sh,内容如下:
cat -n var3.sh #!/bin/bash echo mylocal=\$mylocal echo myglobal=$mylobal在var3.sh脚本中,设置了两个变量,一个是mylocal,表示局部变量,一个是myglobal,表示全局变量。 在终端上给此变量赋值,然后执行本执var3.sh,很明显,结果是空值:
mylocal=1 myglobal=2 bash var3.sh mylocal= myglobal=针对mylobal执行export来导出变量,再看看结果:
export myglobal bash var3.sh mylocal= myglobal=2看,脚本程序已经看到了myglobal的值,这里就是export将myglobal导出,真是起到作用了。
阶段总结:
他的内幕: 当使用export来导出一个变量时,当前shell就会将此变量放到“导出变量列表”中,一旦在某个时刻需要建立子shell时,就会将这个导出变量列表拷贝一分给子shell,这样子shell也就有所应当的看到了这些被导出的变量了。
引子: 现在子shell如果想改变这份“导出变量列表”中的某些内容,那么父shell到底能不能察觉呢?父shell会不会随着子shell一起修改这些值呢?
荔汁四:
export myglobal=10 cat -n var4.sh #!/bin/bash myglobal=33 echo myglobal=$myglobal bash var4.sh myglobal=33 echo $myglobal 10可见,在子shell是无法改变父shell中的“导出变量列表”中变量的值的。子shell只能修改自己手里的那份“导出变量列表”中变量的值。
阶段总结: 子shell是无法改变父shell中的“导出变量列表”中变量的值的。 变量一旦被导出,对所有后续执行的子shell,该变量都是导出变量。 关于export -p: 可以执行export -p来查看当前shell的导出变量列表。这其中一定是包括了从父shell继承来的导出变量列表。 全文总结: 1.没有导出的局部变量,子shell是看不到的。 2.导出变量列表被复制给子shell,子shell可以修改和存取他,但是这种修改父shell看不到。 3.导出变量列表的上述特性对于直接产生的子shell生效,对于由子shell产生的后继子shell也是如此。 4.export可以在变量赋值之后用,也可以在变量赋值之前用。
shell与export命令 用户登录到Linux系统后,系统将启动一个用户shell。在这歌shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,他的脚本shell将终止,可以返回到执行该脚本之前的shell。当一个脚本程序运行完毕,他的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来说,用户可以有许多shell,每个shell都是由某个父shell派生的。 在子shell中定义的变量只在该子shell内有效,如果在一个shell脚本程序中定义了一个变量,其他的shell不能引用他,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。 后续请看https://blog.csdn.net/wangqing_12345/article/details/51853282