linux 环境变量学习

本文介绍了环境变量的概念,如何在终端中查看和操作环境变量,包括添加、修改、删除,以及如何通过编程接口如C语言中的getenv、setenv和unsetenv函数进行操作。还重点讲解了PATH和PS1环境变量的作用以及它们在bash中的行为。
摘要由CSDN通过智能技术生成

 什么是环境变量?

  1. 每个进程都有自己的环境环境变量
  2. 格式:“键=值”
  3. 进程可以通过环境变量访问计算机资源
  4. 终端输入env命令,可以查看环境变量列表
  5. 通过echo $name可以查看某个环境变量的值

环境变量的添加

  1. 例如,在终端输入例如 FOOD=chicken,表示当前进程增加名为“FOOD”值为chicken的环境变量。如果环境变量FOOD是存在的,则代表更改其值。通过echo $FOOD,可查看其值。这时FOOD是不显示在环境变量列表上的。
  2. 注意,在“=”左右不能加空格。

环境变量的类别

环境变量分为两类:

  1. 可以被子进程继承,显示在环境列表上的
  2. 不能被子进程继承,自定义变量

将自定义的环境变量显示在环境变量列表上

        export name

删除环境变量

        unset name

常见的环境变量

PATH环境变量

        echo $PATH

        该环境变量记录的是bash进程对命令的检索路径

        格式:用":"分割多个路径。当在bash下输入命令的时候,首先在第一个路径找改命令的可执行程序,找到就执行,不再向后找;如果找不到,就去第二个路径找...,找到最后一个都找不到,就提示该命令不能找到的错误。

PS1自定义变量

       echo $PS1

        该环境变量决定了串口命令行的提示符内容

        可以通过对PS1环境变量的设置来精简提示符内容

        PS1='\W\$'           W(大写):表示最后一个路径

        只显示最后一级目录

有效范围

如果没有特殊操作,对环境的设置仅对当前的bash进程有效,开启新的终端,之前的操作不会被保留。

在家目录下有个名为.baserc的脚本文件,每次bash进程启动前,都会执行该脚本的内容。如果希望环境变量的设置对每个bash进程都有效,可以将环境变量写道该脚本文件中。然后执行source ~/.baserc命令,使得该文件生效。

环境变量表

环境变量表就是一个以NULL指针结束的字符指针数组,其中每个元素都是字符指针,指向一个空字符结尾的字符串,字符串就是形如“键=值”形式的环境变量。该指针数组的地址保存在全局环境变量environ中。

通过全局环境变量表指针environ可以访问所有环境变量

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 extern char **environ;
  5 
  6 int main()
  7 {
  8     char **pp;
  9 
 10     for(pp = environ; pp && *pp; ++pp) {
 11         printf("%s\n", *pp);
 12     }
 13 
 14     return 0;
 15 }

相关函数

获取某个环境变量值

#include <stdlib.h>

char *getenv(const char *name);

功能:根据环境变量名称获取其值

参数:name指针 环境名称字符串

返回值:成功返回对应的环境变量的值,失败返回NULL

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 int main(int argc, char *argv[])
  5 {
  6     char *env_value;
  7 
  8     env_value = getenv(argv[1]);
  9     printf("env_value = %s\n", env_value);
 10 
 11     return 0;
 12 }

添加或者修改某个环境变量值

#include <stdlib.h>

int setenv(const char *name, const char *value, int overwrite)

功能:添加或者修改环境变量

参数:name     环江变量的键
      value    环境变量的值
      overwrite 如果环境变量存在,传0保持原值不变,传非零表示替换以前值

返回值:成功返回0,失败返回非零



int unsetenv(const char *name)

功能:删除环境变量

参数:要删除的环境变量名

返回值:成功返回0,失败返回非0


int clearenv(void)

功能:清理环境变量 (调用该函数后,environ会被置为NULL)
返回值:成功返回0,失败返回非0
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 
  5 int main(int argc, char *argv[])
  6 {
  7     char *env_value;
  8     char *name, *value;
  9     int overwrite;
 10     int ret;
 11 
 12     name = argv[1];
 13     value = argv[2];
 14     overwrite = atoi(argv[3]);
 15 
 16     ret =  setenv(name, value, overwrite);
 17     if (ret)
 18         printf("add env failed\n");
 19 
 20     env_value = getenv(name);
 21         printf("env_value = %s\n", env_value);
 22 
 23     ret = unsetenv(name);
 24     if (ret)
 25         printf("del env failed\n");
 26 
 27     env_value = getenv(name);
 28     printf("env_value = %s\n", env_value);
 29 
 30     return 0;
 31 }


$gcc fun_env.c 
$./a.out FOOD cheiken 0
env_value = cheiken
env_value = (null)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值