环境变量的全局属性

举报
跳动的bit 发表于 2022/08/30 07:36:51 2022/08/30
【摘要】 注意环境变量的全局属性和语言上的全局属性不一样,比如说你定义了一个全局变量,这个全局变量就可以被当前文件中所有函数访问,而环境变量的全局属性指的是它可以被子进程继承下去。这里我们学习两个获取环境变量的函数 —— getenv(主文主要学习)、setenv。其中使用getenv需要包含<stdlib.h> ,它的参数是环境变量的名称,返回值是该变量对应的内容。在命令行上运行的 “ 大部分 ” ...

注意环境变量的全局属性和语言上的全局属性不一样,比如说你定义了一个全局变量,这个全局变量就可以被当前文件中所有函数访问,而环境变量的全局属性指的是它可以被子进程继承下去。

这里我们学习两个获取环境变量的函数 —— getenv(主文主要学习)、setenv。

在这里插入图片描述
其中使用getenv需要包含<stdlib.h> ,它的参数是环境变量的名称,返回值是该变量对应的内容。

在这里插入图片描述

在命令行上运行的 “ 大部分 ” 指令,它的父进程都是bash。不管是你的程序,还是系统的命令,都是bash创建子进程,子进程执行你的命令(创建子进程我们知道了fork,但子进程执行命令会在进程控制中会谈)。

命令行中,我们可以定义两种变量 ❓

  1. 本地变量。

    MY_VAL是在当前bash内定义的变量,只能在当前 shell 命令行解释器内被访问,不可以被子进程继承。

    在这里插入图片描述

    验证不可以被子进程继承,./mytest运行后就是bash的子进程。

    在这里插入图片描述

    export ???

      其中export MY_VAL就可以将本地变量MY_VAL导成环境变量,而环境变量可以被bash的子进程mytest继承。

    在这里插入图片描述
    env 可以查看所有的环境变量,如何查看所有本地变量 ??

      env用于查看所有环境变量;set用于查看所有本地变量、环境变量。

    在这里插入图片描述

    在这里插入图片描述
    unset ???

    清除设置的环境变量。

    在这里插入图片描述

    echo 本地变量 ???

    在这里插入图片描述

      echo 是命令吗;echo 是命令的话需要创建子进程吗;如果 echo 创建了子进程它是怎么打到本地变量呢;上面不是说本地变量是不能被子进程继承的吗;“ 大部分 ”命令在命令行上运行,都是作为 bash 的子进程在运行。

      这里想说的是 echo 当然是命令,echo 在执行的时候肯定是 bash 的子进程,那么感觉它作为子进程却能继承本地变量的原因是:我们上面说的是 “ 大部分 ” 命令,而其中像 echo、export、set、env 等命令,我们一般称之为内建命令,可以理解为 shell 程序内部的一个函数,也就是说 shell 在执行命令时,如果是内建命令,那么它直接调用内建命令对应的方法,如果不是内建命令,那么就会 fork 子进程。

  2. 环境变量。

    环境变量具有 “ 全局属性 ”,它可以被子进程继承。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。