实现shell脚本中的变量传递 前几篇文章中已经介绍过局部变量和环境变量的含义,接下来我们来拓展下,看看变量怎样实现在shell脚本 中的传递shell脚本其实是用当前shell的子shell去执行的,所以在shell脚本中定义的普通变量只适用于当前 shell的子shell环境,也就是说在当前shell环境中不适用,也不适用于这个shell脚本的子shell。 在shell脚本中定义的环境变量可以传承给它的子shell,但是也不能传递给当前shell(不能逆向传递) 如果在一个脚本中需要执行另一个脚本,并且运用其中的变量,改如何申明变量呢,我们来看一个例子: /root/test1.sh内容如下: #!/bin/bash aaa=yuanfaxiang echo "test1:$aaa" /root/test2.sh内容如下: #!/bin/bash /root/test1.sh echo "test2:$aaa" 执行test2.sh结果如下: [root@centos ~]# sh test2.sh test1:yuanfaxiang test2: 从结果可以看出test1.sh没有把变量aaa的值传递给test2.sh 我们把test2.sh改成: #!/bin/bash source /root/test1.sh echo "test2:$aaa" 执行test2.sh结果如下: [root@centos ~]# sh test2.sh test1:yuanfaxiang test2: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/bash echo "test3:$aaa" 把test2.sh改成: #!/bin/bash source /root/test1.sh echo "test2:$aaa" /root/test3.sh 执行test2.sh: [root@shenji ~]# sh test2.sh test1:yuanfaxiang test2:yuanfaxiang test3: 结果显示test3.sh没有继承test1.sh中申明的变量,因为source /root/test1.sh只是让test1.sh 中的变量在test2.sh中生效,aaa毕竟还是个普通局部变量,并不能被test3.sh这个子shell所继承, 所以我们可以想到环境变量,把aaa变成test2.sh这个脚本的环境变量,让test2.sh的子进程也能继承。 将test1.sh改成: #!/bin/bash export aaa=yuanfaxiang echo "test1:$aaa" 执行test2.sh后有如下结果: [root@shenji ~]# sh test2.sh test1:yuanfaxiang test2:yuanfaxiang test3:yuanfaxiang 在test1.sh中声明了环境变量也就是全局变量,在test2.sh中用source执行test1.sh,将变量带到了 test2.sh中,并使之成为test2.sh执行过程中的环境变量,可以被test2.sh的子进程继承,起到了顺向 传递效果。
嵌入式 变量在shell脚本间的传递
最新推荐文章于 2024-05-29 12:11:11 发布