嵌入式 变量在shell脚本间的传递

来源:互联网 发布:java上传文件相对路径 编辑:程序博客网 时间:2024/06/18 08:13
实现shell脚本中的变量传递前几篇文章中已经介绍过局部变量和环境变量的含义,接下来我们来拓展下,看看变量怎样实现在shell脚本中的传递shell脚本其实是用当前shell的子shell去执行的,所以在shell脚本中定义的普通变量只适用于当前shell的子shell环境,也就是说在当前shell环境中不适用,也不适用于这个shell脚本的子shell。在shell脚本中定义的环境变量可以传承给它的子shell,但是也不能传递给当前shell(不能逆向传递)如果在一个脚本中需要执行另一个脚本,并且运用其中的变量,改如何申明变量呢,我们来看一个例子:/root/test1.sh内容如下:#!/bin/bashaaa=yuanfaxiangecho "test1:$aaa"/root/test2.sh内容如下:#!/bin/bash/root/test1.shecho "test2:$aaa"执行test2.sh结果如下:[root@centos ~]# sh test2.shtest1:yuanfaxiangtest2:从结果可以看出test1.sh没有把变量aaa的值传递给test2.sh我们把test2.sh改成:#!/bin/bashsource /root/test1.shecho "test2:$aaa"执行test2.sh结果如下:[root@centos ~]# sh test2.shtest1:yuanfaxiangtest2:yuanfaxiang结果显示test2.sh继承了test1.sh中定义的变量aaa。原因分析:在第一次执行test2.sh时,test1.sh被作为了test2.sh的子shell来执行,其中定义的变量只在test1.sh中起效,不能逆向传递到test2.sh中;而在第二次执行中,采用source来执行test1.sh,意思是直接把test1.sh在当前的test2.sh中执行,没有作为子shell去执行,test1.sh中定义的变量,就影响到了test2.sh。如果我们再建一个test3.sh#!/bin/bashecho "test3:$aaa"把test2.sh改成:#!/bin/bashsource /root/test1.shecho "test2:$aaa"/root/test3.sh执行test2.sh:[root@shenji ~]# sh test2.shtest1:yuanfaxiangtest2:yuanfaxiangtest3:结果显示test3.sh没有继承test1.sh中申明的变量,因为source /root/test1.sh只是让test1.sh中的变量在test2.sh中生效,aaa毕竟还是个普通局部变量,并不能被test3.sh这个子shell所继承,所以我们可以想到环境变量,把aaa变成test2.sh这个脚本的环境变量,让test2.sh的子进程也能继承。将test1.sh改成:#!/bin/bashexport aaa=yuanfaxiangecho "test1:$aaa"执行test2.sh后有如下结果:[root@shenji ~]# sh test2.shtest1:yuanfaxiangtest2:yuanfaxiangtest3:yuanfaxiang在test1.sh中声明了环境变量也就是全局变量,在test2.sh中用source执行test1.sh,将变量带到了test2.sh中,并使之成为test2.sh执行过程中的环境变量,可以被test2.sh的子进程继承,起到了顺向传递效果。
原创粉丝点击