Linux环境变量(PATH | main函数的三个参数)

环境变量:保存运行环境参数的变量;使程序运行环境配置更加灵活;以及可以通过环境变量实现进程间的小量数据通信(父子进程)

环境变量命令操作

  1. env查看环境变量
    在这里插入图片描述

  2. set查看所有变量。变量分为普通变量和环境变量。一般set | grep 变量名这样用,因为set的变量太多。

  3. export 声明/设置环境变量
    在这里插入图片描述
    刚开始MYVAL只是普通变量,通过env查找不到,然后对MYVAL进行export声明,此时的MYVAL就是环境变量,通过env可以查找到。也可以直接设置环境变量。
    在这里插入图片描述

  4. echo查看指定变量
    在这里插入图片描述echo $PATH: $的作用就是把PATH值当做变量名使用,引用变量内容。

  5. unset删除环境变量

PATH变量

我们先来看看PATH中的内容。
在这里插入图片描述我们发现PATH中都是一些路径,那这些路径都用来干什么?

我们在shell中输入命令时,直接输入ls等命令名称,就可以执行。ls也是usr/bin目录下的可执行文件,但是在我们自己的目录下这样使用就会报错,我们需要在前面加上路径。
在这里插入图片描述

这怎么还区别对待?其实并不是区别对待,我们仔细观察PATH环境变量,会发现ls所在的user/bin路径就在其中,那如果我们把当前路径加进去,是不是也可以直接使用?
在这里插入图片描述
现在我们再来直接使用,看看是否还会出错。
在这里插入图片描述
现在看来,就是需要把路径加入PATH中,才能直接使用。

总结: PATH就是程序运行的默认搜索路径。在命令行终端中输入命令名称可以直接执行对应名称的命令程序,实际上是因为shell捕捉到输入的命令名称之后,然后去PATH环境变量指定的路径下去找这个程序,找到了就运行,找不到就报命令没有找到的错误。

父子进程间环境变量的传递

在这里插入图片描述
我们先来执行这个简单的程序,然后发现它也有父进程,他的父进程就是bash。bash是命令行终端里第一个命令行解释程序,是shell的一种。

事实上,我们在一个终端里默认运行的程序,它们的父进程都是shell程序。

我们先在shell中定义一个环境变量,然后再去他的子程序中查找是否有这个环境变量,观察它们之间的传递性,再看看普通变量与环境变量的区别。

char *getenv(const char *name);查找环境变量的函数,通过名称获取值
#include<stdlib.h>头文件

在shell中分别定义环境变量、普通变量
在这里插入图片描述

在子进程中查找环境变量、普通变量
在这里插入图片描述
我们发现可以找到环境变量,但是找不到普通变量。那就说明父进程不会给子进程传递普通变量,但是父进程给子进程传递环境变量。子进程现在有的环境变量,是父进程shell它传递的。

环境变量与普通变量的区别:环境变量父子进程之间具有传递性,普通变量父子进程之间不具有传递性。

总结:

shell中运行的进程都是shell的子进程。不同的shell有不同的环境变量。

查看环境变量的代码操作:

  1. char *getenv(const char *name);通过名称获取值
    在这里插入图片描述

  2. extern char **environ;声明已有的全局变量,这个变量中保存了所有能够访问到的环境变量的字符串地址
    在这里插入图片描述
    我们可以通过这个全局变量,查看能够访问到的环境变量。

  3. main函数是一个不定参函数,int main(int argc, char* argv[], char* environ[])
    argc---->程序运行参数的个数
    argv---->程序运行参数字符串地址
    environ---->环境变量的字符串地址
    在这里插入图片描述
    我们也可以通过main函数的第三个参数,查看能够访问的环境变量。
    我们顺便一起来看前两个参数的用法。
    在这里插入图片描述
    ./path、ls、-l、-a都属于运行参数。所以参数个数就有4个,它们的地址都放在argv中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值