Linux_环境变量

本文详细介绍了Linux环境变量的查询、常见变量如PATH、HOME和PWD的作用,以及如何在程序中增加、删除环境变量。此外,还探讨了main函数的形参,特别是argv和env,以及如何通过系统调用接口getenv和putenv获取和设置环境变量。最后,提到了全局变量environ的使用方法。
摘要由CSDN通过智能技术生成

目录

1、查询所有环境变量

2、常见的环境变量

2.1 PATH 

2.2 HOME

2.3 PWD 

3、增加新的环境变量

4、删除环境变量

5、main函数的三个形参 

5.1 argv字符串数组 

5.2 env字符串数组

6、系统调用接口 

6.1 getenv

6.2 putenv 

7、全局变量environ

结语 


前言:

        环境变量指的是在操作系统进行运行时,总是需要根据某些已经被加载好的参数进行运行的,因为操作系统运行也是得有“依据”的,而他的依据就叫做环境变量。

1、查询所有环境变量

        在Linux下可以使用指令env来查询Linux下所有的环境变量,操作如下(节选部分截图):

2、常见的环境变量

2.1 PATH 

        当输入一个指令时,该指令之所以可以被系统调用,原因就是系统会默认到PATH中去寻找这个指令存在哪个目录,没错,PATH实际上就是一串路径,只有在这些路径下的指令才可以被正常的执行,比如ls、cd这些指令的路径是/usr/bin,而PATH中包括/usr/bin,测试如下:

        注意:若要观察环境变量中的具体内容,则使用echo + $要查看的环境变量。 因此也可以解释当运行一个可执行程序时,需要带./才能运行,就是因为自己写的可执行程序的路径不在PATH中,所以需要带./指明该可执行程序的路径,否则系统找不到该程序在哪也就无法执行该程序了。

2.2 HOME

        登录的用户有普通用户和root用户,系统之所以可以将两者区分开了,就是因为HOME环境变量的存在,因为有了环境变量home,所以每次登录不同的用户时,系统会自动识别HOME的位置,然后分在对应的目录下。 

        查看HOME的内容:

        可以发现切换不同的用户导致HOME的内容不一样,换句话说,实际上是因为HOME的内容不一样导致所登录的用户不一样。 

2.3 PWD 

        指令pwd可以获取当前路径,实际上pwd就是调用了环境变量PWD,所以可以直接从PWD得到当前路径。

3、增加新的环境变量

        用export envname(表示要增加的环境变量),可以新增环境变量,并且可以用env看到该环境变量。测试如下:

4、删除环境变量

        对应的,也可以使用指令unset envname(表示要删除的环境变量)来删除环境变量,并且用env看不到被删除的环境变量了。测试如下:

5、main函数的三个形参 

        main函数的形参用的是非常少的,因为main函数形参的具体作用是打印出来命令行的信息和环境变量的信息,所以在正常的代码编写中几乎用不到该形参内容,不过可以确定的是main函数可以打印出所以环境变量的信息。

        main函数的三个参数:

int main(int argc, char *argv[], char* env[])
//argv存放命令行参数的字符指针
//env存放环境变量的字符指针

5.1 argv字符串数组 

        在了解如何在main函数中打印环境变量前,前了解main函数的第二个参数的含义,char* argv[],他是一个指针数组,里面保存的是char*类型的元素,而每一个char*元素指向的是在命令行运行该程序时所输入的指令(即命令行参数),只不过指令被当成字符串并把该字符串的首地址存放到了argv中。(argc表示argv里的元素个数

        打印命令行参数的测试代码如下:

  1 #include<stdio.h>
  2 
  3 int main(int argc,char* argv[])
  4 {
  5     int i = 0;
  6     for(;i<argc;i++)
  7         printf("argv[%d]:%s\n",i,argv[i]);                                                                                                                          
  8     return 0;
  9 }

         测试结果:

        从结果可以发现的确可以在main函数内打印外部的运行指令以及选项。 

5.2 env字符串数组

        env也是一个字符串数组,他所保存的是环境变量的内容,只不过是以字符串的形式在该数组中呈现,并且该数组的最后一个元素默认为NULL,依然可以通过上述打印命令行的方式打印出环境变量的内容。

        打印环境变量的测试代码如下:

    1 #include<stdio.h>
    2 
    3 int main(int argc,char* argv[],char* env[])
    4 {
    8     int i = 0;
    9     for(;env[i];i++)//因为env的最后一个元素为NULL,所以可以直接用其作为循环条件
   10         printf("env[%d]:%s\n",i,env[i]);                                                                                                                          
   11     return 0;                                                                                                                                    
   12 } 

        测试结果(部分截图): 

        那么为何main函数可以打印上述信息呢?因为运行程序时不只是单单的把该程序加载到内存中(进程概念),操作系统还会把这两张表(argv和env)的内容通过调用main函数的方式传给main函数,而操作系统本身在启动的时候会从配置文件中读取环境变量表,然后会一代一代的传给他的子进程及后代。

6、系统调用接口 

        上文说到可以用指令的方式获取环境变量,然而还可以在代码中采用调用接口的方式获取环境变量,以及调用接口添加环境变量,使用最多的两个系统接口是getenv和putenv。

6.1 getenv

        顾名思义就是得到一个环境变量的内容,可以通过Linux下的man手册得知该接口的用法: 

        该接口的实参是一个字符串,表示我们需要获得环境变量的名称,返回也是一个字符串,即表示环境变量的内容。

        测试接口代码如下: 

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 int main()
  5 {
  6     printf("PATH: %s\n",getenv("PATH")); //获取PATH的内容                                                                                                                         
  7     return 0;
  8 }

        运行结果:

        从结果可以发现,getenv一样可以获取环境变量的内容。 

6.2 putenv 

        putenv可以添加环境变量,他的作用和指令export相似,他的用法:

        并且添加成功时返回0,若添加失败则返回非零,但是值得注意的是putenv只是把添加的环境变量加载到main函数中的env字符串数组中,所以导致的是只能在该进程下看到添加的环境变量,而在别的进程下是看不到的

7、全局变量environ

         environ是一个二级指针,他指向环境变量表也就是env字符串数组,他的用法可以在man手册中查到。

        因此在使用environ时,需要用extern来声明。

        environ的测试代码如下:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<unistd.h>
  4 
  5 int main()//注意main函数中没有参数                                                                                                                                                   
  6 {
  7     extern char** environ;
 11     int i = 0;
 12     for(;environ[i];i++)//依靠environ打印环境变量表
 13         printf("environ[%d]:%s\n",i,environ[i]);
 14     return 0;
 15 }

        测试结果(节选部分截图):

结语 

        以上就是关于环境变量的讲解,环境变量是操作系统正常运行的前提,在开机的同时操作系统会自动向配置文件中读取环境变量。

        最后希望本文可以给你带来更多的收获,如果本文对你起到了帮助,希望可以动动小指头帮忙点赞👍+关注😎+收藏👌!如果有遗漏或者有误的地方欢迎大家在评论区补充,谢谢大家!! 

  • 33
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安权_code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值