初识环境变量

引言

当我们想要运行某个程序的时候,我们要在前面加上./,是为了告诉操作系统我们想要运行的程序处于当前文件中。但是在我们使用ls , pwd等变量的时候却不需要,为什么?这就是因为我们接下来要讲的环境变量

环境变量

1.基本概念:

  • 概念:操作系统中用来指定操作系统运行环境的一些参数
  • 特性:具有全局性

2.常见的环境变量:

  • PATH:制定命令的搜索路径。
  • PWD:查看当前步骤所处位置。

3.和环境变量相关的命令:

  • echo:显示某个环境变量的值
    在这里插入图片描述

  • export:设置一个新的环境变量 在这里插入图片描述

  • env:显示所有的环境变量

  • unset:清除环境变量
    初识环境变量_第1张图片

  • set:显示本地定义的shell和环境变量

如何将我们自己的程序置入环境变量中?(不建议实现,因为可能会污染环境变量)

当我们运行一个二进制程序的时候,我们需要在二进制程序前面加上./,不然无法运行。
初识环境变量_第2张图片

  • 这是为什么?
    因为系统并不知道otto在系统的哪个位置,无法执行otto的二进制程序。
  • 如何实现用otto直接运行二进制程序?
    将otto所在路径追加到某一个环境变量中
    初识环境变量_第3张图片
    在这里我们将otto所在路径添加到了PATH环境变量中,因此我们可以直接运行otto二进制程序

4.通过代码获取环境变量:

  • 命令行第三个参数
#include

int main(int argc, char* argv[], char* env[])
{
    int i = 0;
    for(; env[i]; i++)
    {
        printf("%s\n", env[i]);
    }
    
    return 0;
}
  • 通过第三方变量environ获取
#include

int main(int argc, char* argv[])
{
    extern char ** environ;//由于environ没有包含在任何头文件中,所以在使用的时候需要用extern声明
    int i = 0;
    for(; environ[i]; i++)
    {
        printf("%s\n",environ[i]);
    }
    return 0;
}

结果:显示该进程所继承的所有环境变量
初识环境变量_第4张图片

5.通过系统调用获取或设置环境变量

  • putenv
  • getevc:获取环境变量
#include
#include

int main()
{
    printf("%s\n", getenv("PATH"));
    return 0;

}

6.(重点)环境变量通常具有全局属性的

环境变量通常具有全局属性,可以被子进程继承下去
下面让我们设置一个本地变量看是否有效果。

#include
#include

int main()
{
    char* env = getenv("MYENV");
    printf("%s\n", env);
    return 0;

}

在这里插入图片描述
结果:环境变量不存在。
我们需要用export将MYENV设置为环境变量,我们才能用getenv调用
在这里插入图片描述

7.注意:

  • 被echo声明的不是环境变量,而被称作本地变量,只存在于当前进程中,无法被继承
  • 被export生命的是环境变量,环境变量被子(孙)进程全部继承,这体现了环境变量的全局性

你可能感兴趣的:(linux)