当前位置: 首页 > news >正文

环境变量 ─── linux第14课

本内容为总结:

1. 环境变量本质是配置信息, 在系统配置时起效 .

2. 环境变量具有全局性(子进程可以继承父进程的环境信息,不能继承本地变量)

3. 进程具有独立性 ,环境变量可以进程间传递信息(只读信息)

环境变量

        环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

        如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

        环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

        环境变量: 系统提供的具有全局属性的变量 (环境变量可以被bash进程之后全部的进程继承)

常见环境变量

  • PATH : 指定命令的搜索路径
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • SHELL : 当前Shell版本,它的值通常是/bin/bash。

查看环境变量方法

echo $name  //name: 你的环境变量的名称

测试HOME

1. 用root和普通用户,分别执行 echo $HOME , 对比差异 .

执行 cd ~; pwd ,   对应 ~ 和 HOME 的关系

HOME:当前用户的家目录

和环境变量相关的命令

1. echo: 显示某个环境变量值

2. export: 设置一个新的环境变量

3. env: 显示所有环境变量

4. unset: 清除环境变量

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

环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串

通过代码如何获取环境变量

方法一: 通过命令行第三个参数


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

方法二: 通过第三方变量environ获取

libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。

#include <stdio.h>
 
int main(int argc, char *argv[])
{
  extern char **environ;
  int i = 0;
  for(; environ[i]; i++)
  {
     printf("%s\n", environ[i]);
  }
  return 0;
}

方法三: 使用getenv()

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 int main()
  5 {
  6     char* mypath =getenv("PATH");
  7     printf("%s\n" ,mypath);
  8     return 0;
  9 }

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

putenv , 后面讲解
getenv , 本次讲解

环境变量 VS 本地(普通)变量

bash进程可以保存变量 能读懂条件 进而可以产生脚本

bash内部有环境变量 ,本地变量 ,argv[]等,如图所示

输入a =100,用env打印全部环境变量没有找到,因为此时a是本地变量

输入export a(可以将a导入环境变量) ,再使用env打印就能看见a=100

unset a (可以将a从环境变量到出到本地变量)

环境变量通常是具有全局属性的

接着上面,重新创建新进程 ,发现依然可以在环境变量里找到a

证明环境变量具有全局性,可以被子进程继承.

本地变量不能子进程被继承

总结放在了开头

相关文章:

  • Debezium日常分享系列之:Debezium 3.0.8.Final发布
  • 面向对象三大特性:多态
  • QT-自定义参数设计框架软件
  • SQL(1)
  • 04 高效HarmonyOS NEXT编程:ArkTS数据结构优化与属性访问最佳实践
  • Three.js 入门(基础材质、贴图、纹理、环境、遮蔽光、透明度、高光贴图)
  • 日常开发记录-radio组件
  • SQL Server数据库中用存储过程来取顺序号
  • Mybatis实现批量添加
  • rust学习笔记11-集合349. 两个数组的交集
  • FreeRTOS系列---程序正常,但任务无法创建
  • Qt之QGraphicsView图像操作
  • C语言--快速排序和归并排序
  • 【回溯】216. 组合总和 III
  • 大模型Agent:人工智能的崭新形态与未来愿景
  • DICOM服务中的C-STORE、 C-FIND、C-MOVE、C-GET、Worklist
  • 一文讲清楚自我学习和深度学习
  • 通过微步API接口对单个IP进行查询
  • postman请求后端接受List集合对象
  • IDEA中Git版本回退终极指南:Reset与Revert双方案详解
  • 杭州手机网站制作公司哪家好/最有效的app推广方式有哪些
  • 热点 做网站和营销 我只服他/搜索seo
  • wap网站部署/网站seo规划
  • 烟台卓通网络科技有限公司/seochinazcom
  • 做企业官网需要多少钱/如何做一个网站的seo
  • 买了域名之后怎么做网站/怎么注册自己公司的网址