linux中出口命令怎么用

介绍

这篇文章将为大家详细讲解有关linux中出口命令怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

接触linux没有多久,最近在学习BASH的出口命令时碰到了一个难道(书上说出口是将自定义变量变成系统环境变量):我在一个脚本文件中定义一个了变量,然后出口变量,按照我自己的想法,执行完这个脚本后,在提示符下一定可以用回声显示出它的值,可结果却不是这样,脚本执行完后用设置根本看不到有这个变量存在。为什么呢?我百思不得其解,最后将问题贴出来,一位前辈告诉我说用源+脚本文件就可以了,我试了一下果然可以,但一个新的问题又出来了。我将脚本中出口命令删除后,用源一样可以。那这个出口好像没有什么用呀。
在经过多次尝试后发现了一些东西,是我自己猜的,如果有什么不对的地方,请指正,谢谢。
执行一个脚本时,会先开启一个子壳环境(不知道执行其它程序是不是这样),然后将父shell中的所有系统环境变量复制过来,这个脚本中的语句就在子shell中执行。(也就是说父shell的环境变量在子shell中可以调用,但反过来就不行,如果在子shell中定义了环境变量,只对该shell或者它的子shell有效,当该子shell结束时,也可以理解为脚本执行完时,变量消失)。为了证明这一点,请看脚本内容:
测试=& # 39;价值# 39;出口测试

这样的脚本执行完后,测试实际上是不存在的。接着看下面的:
测试=& # 39;价值# 39;出口测试

bash
这里在脚本最后一行再开一个子外壳,该外壳应该是脚本文件所在壳牌的子shell,这个脚本执行完后,是可以看到测试这个变量的,因为现在是处于它的子shell中,当用出口退出子shell后,测试变量消失。
如果用源对脚本进行执行时,如果不加出口,就不会在子shell中看到这个变量,因为它还不是一个系统环境变量呀,如脚本内容是:
测试=& # 39;价值# 39;
用源执行后,在外壳下是能看到这个变量,但再执行bash开一个子shell时,测试是不会被复制到子shell中的,因为执行脚本文件其实也是在一个子shell中运行,所以我再建另一个脚本文件执行时,是不会输入任何东西的,内容如:echo $测试。所以这点特别注意了,明明在提示符下可以用echo $测试输出变量的值,为什么把它放进脚本文件就不行了呢?
所以得出的结论是:1,执行脚本时是在一个子壳环境运行的,脚本执行完后该子壳自动退出;2,一个shell中的系统环境变量才会被复制到子shell中(用出口定义的变量);3,一个shell中的系统环境变量只对该shell或者它的子shell有效,该壳结束时变量消失(并不能返回到父shell中)。3,不用出口定义的变量只对该外壳有效,对子shell也是无效的。
后来根据版主的提示,整理了一下贴子:为什么一个脚本直接执行和用源执行不一行呢?这也是我自己碰到的一个问题.manual原文是这样的:从文件名读取和执行命令在当前shell环境和返回最后一个命令的退出状态执行的文件名。明白了为什么不一样了吧?直接执行一个脚本文件是在一个子shell中运行的,而源则是在当前壳环境中运行的。根据前面的内容,你也已经明白其中的道理了吧。
困扰了我几天的问题终于可以圆满的解决了。

关于“linux中出口命令怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。

linux中出口命令怎么用