重生之我在学环境变量

news2024/11/23 17:06:06

环境变量

在这里插入图片描述

基本概念

  • 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
  • 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

命令行参数

在这里插入图片描述

argv是指针数组

在这里插入图片描述

把上面的字符串切成一个一个字符,放到对应的下标里面,组成了一个字符串argc

命令行参数可以把一个程序不同子功能,像选项一样实现

在这里插入图片描述

我们之前写代码,用main函数,main函数的命令行参数,是实现程序不同子功能的方法

通过bash进行切分,划分不同的命令行参数

1)要执行一个程序,必须要先找到它。

2)系统中存在环境变量,来帮助系统找到目标二进制文件

在这里插入图片描述

环境变量是PATH,系统中搜索指令的默认搜索路径用$

1)如何理解环境变量?

bash会形成一张表,叫做环境变量表,这张表类似于指针数组,当我们输入ls指令的时候,bash会拿到相应的表,叫做命令行参数表,所以说bash有两张表

2)环境变量,最开始从哪里来?

是从系统的相关配置文件中来的

在这里插入图片描述

认识更多的环境变量

在这里插入图片描述

常⻅环境变量

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

查看环境变量⽅法

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

测试PATH

创建hello.c⽂件

#include <stdio.h>
 int main()
 {
 printf("hello world!\n");
 return 0;
 }
  1. 对⽐./hello执⾏和之间hello执⾏
  2. 为什么有些指令可以直接执⾏,不需要带路径,⽽我们的⼆进制程序需要带路径才能执⾏?
  3. 将我们的程序所在路径加⼊环境变量PATH当中,
  4. 对⽐测试 export PATH=$PATH:hello 程序所在路径

测试HOME

  1. ⽤root和普通⽤⼾,分别执⾏
  2. 执⾏ echo $HOME ,对⽐差异 cd ~; pwd ,对应 ~ 和 HOME 的关系

和环境变量相关的命令

  1. echo:显⽰某个环境变量值
  2. export: 设置⼀个新的环境变量
  3. env: 显⽰所有环境变量
  4. unset: 清除环境变量
  5. set: 显⽰本地定义的shell变量和环境变量

环境变量的组织⽅式

在这里插入图片描述

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

补充说明:

命令行参数会被bash用,接着被用户间接地使用

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

  • 命令第三个参数
#include <stdio.h>
 int main(int argc, char *argv[], char *env[])
 {
 int i = 0;
 for(; env[i]; i++){
 printf("%s\n", env[i]);
 }
 return 0;
 }
  • 通过第三方environ获取
#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;
 }

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

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

  • getenv
 #include <stdio.h>
 #include <stdlib.h>
 int main()
 {
 printf("%s\n", getenv("PATH"));
 return 0;
 }

常⽤getenv函数来访问特定的环境变量。

我们更推荐getenv的方式获得环境变量,另外两种方法都是只能得到链表,也就是地址,不能得到具体的内容,我们想要得到环境变量还是更想要内容

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

  • 环境变量通常具有全局属性,可以被子进程继承下去
#include <stdio.h>
 #include <stdlib.h>
 int main()
 {
 char *env = getenv("MYENV");
 if(env){
 printf("%s\n", env);
 }
 return 0;
 }

直接查看,发现没有结果,说明该环境变量根本不存在

  • 导出环境变量
export MYENV="hello world"
  • 再次运⾏程序,发现结果有了!说明:环境变量是可以被⼦进程继承下去的!

在这里插入图片描述

理解环境变量的特性

1.环境变量具有全局性

2.补充两个概念

1)本地变量

不会被子进程继承,只在bash内部使用

bash会记录1.环境2.本地

2)我们的变量究竟在谁里面?

在bash里面。

在这里插入图片描述

如果只进⾏ MYENV = “helloworld” ,不调⽤export导出,在⽤我们的程序查看,会有什么结 果?为什么?

  • 普通变量
    地变量

不会被子进程继承,只在bash内部使用

bash会记录1.环境2.本地

2)我们的变量究竟在谁里面?

在bash里面。

[外链图片转存中…(img-VwSXgT6M-1732280661671)]

实验

如果只进⾏ MYENV = “helloworld” ,不调⽤export导出,在⽤我们的程序查看,会有什么结 果?为什么?

  • 普通变量
  • 如果时间允许:做⼀下~/. bash_profile&&~/.bashrc修改⽂件级环境变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2246139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink学习连载文章4-flink中的各种转换操作

首先&#xff0c;先搞一个模板代码&#xff0c;方便后面的操作 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ! "")package ${PACKAGE_NAME};#end #parse("File Header.java") import org.apache.flink.streaming.api.environment.StreamExecutionEnv…

fastadmin实现站内通知功能

实现效果如下 application/admin/view/common/header.html <style>#notificationMenu {display: none;position: absolute;top: 40px;right: 0;background: #fff;border-radius: 6px;padding: 10px 0;width: 300px;box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);z-inde…

默语博主的推荐:探索技术世界的旅程

这是第一位推荐的博主默语 引言&#xff1a; CSDN中的默语博主是一个值得关注和学习的技术大拿。他的博客内容不仅涵盖了各种热门的技术领域&#xff0c;还能够帮助读者深入了解技术背后的原理和应用。在这篇类博客的内容中&#xff0c;我们将探索默语博主推荐的几篇博客&#…

【漏洞复现】|智互联SRM智联云采系统quickReceiptDetail SQL注入漏洞

漏洞描述 智互联(深圳)科技有限公司SRM智联云采系统针对企业供应链管理难题&#xff0c;及智能化转型升级需求&#xff0c;智联云采依托人工智能、物联网、大数据、云等技术&#xff0c;通过软硬件系统化方案&#xff0c;帮助企业实现供应商关系管理和采购线上化、移动化、智能…

【数据分析】认清、明确

1、什么是数据分析。 - 通过对大量的数据进行科学的分析。 - 得出结论&#xff0c;提出建议&#xff0c;辅助公司企业的决策。2、数据分析分为几步。 - 1.明确目的! - 2.收集数据!自己的数据! 自动化采集的数据! - 3.数据处理! - 4.数据分析!数据分析(业务)数据挖掘(代码算法…

前后端分离,解决vue+axios跨域和proxyTable不生效等问题

看到我这篇文章前可能你以前看过很多类似的文章。至少我是这样的&#xff0c;因为一直没有很好的解决问题。 正文 当我们通过webstorm等IDE开发工具启动项目的时候&#xff0c;通过命令控制台可以观察到启动项目的命令 如下&#xff1a; webpack-dev-server --inline --prog…

WPF中如何让Textbox显示为一条直线

由于Textbox直接使用是一条直线 设置如下代码 可以让Textbox变为直线输入 <Style TargetType"TextBox"x:Key"UsernameTextBoxStyle"><Setter Property"Template"><Setter.Value><ControlTemplate TargetType"{x:Typ…

TSmaster Measurement setup(测量设置)

文章目录 1、Measurement setup功能介绍2、数据流过滤3、Measurement Filter 测量过滤器3.1 插入过滤器3.2 设置过滤数据3.3 过滤条件的失能3.4 窗口缩放 1、Measurement setup功能介绍 Measurement setup 窗体主要包含三个功能&#xff1a; 提供一个面板&#xff0c;用户能够…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第二十集:制作专门渲染HUD的相机HUD Camera和画布HUD Canvas

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作HUD Camera以及让两个相机同时渲染屏幕二、制作HUD Canvas 1.制作法力条Soul Orb引入库2.制作生命条Health读入数据3.制作吉欧统计数Geo Counter4.制作…

万字长文解析Golang高性能内存缓存库BigCache

项目地址 BigCache 是一个快速&#xff0c;支持并发访问&#xff0c;自淘汰的内存型缓存&#xff0c;可以在存储大量元素时依然保持高性能。BigCache将元素保存在堆上却避免了GC的开销。 背景介绍 BigCache的作者在项目里遇到了如下的需求&#xff1a; 支持http协议支持 10…

vulfocus在线靶场:骑士cms_cve_2020_35339:latest 速通手册

目录 一、启动环境&#xff0c;访问页面&#xff0c;ip:端口号/index.php?madmin,进入后台管理页面&#xff0c;账号密码都是adminadmin 二、进入之后&#xff0c;根据图片所示&#xff0c;地址后追加一下代码&#xff0c;保存修改 ​三、新开标签页访问&#xff1a;①ip:端…

【数据结构】归并排序 —— 递归及非递归解决归并排序

归并排序 一、归并排序1、归并排序的思想2、归并排序代码实现&#xff08;递归&#xff09;<1> 归并排序的递归区间<2> 归并排序的稳定性<3> 拷贝 3、归并排序代码实现&#xff08;非递归&#xff09;<1> 循环区间溢出问题 二、总结 一、归并排序 1、…

Java技术复习提升 10异常

10 异常 10.1异常介绍及分类 异常捕获 选中后alttabt->选中try-catch 异常就是程序执行中不正常的情况 注意语法和逻辑错误并不是异常 异常分类有两种 error和exception error是错误 虚拟机无法解决的严重问题 exception是其他因为编程错误或者外在因素导致的一般性的问…

transformer.js(三):底层架构及性能优化指南

Transformer.js 是一个轻量级、功能强大的 JavaScript 库&#xff0c;专注于在浏览器中运行 Transformer 模型&#xff0c;为前端开发者提供了高效实现自然语言处理&#xff08;NLP&#xff09;任务的能力。本文将详细解析 Transformer.js 的底层架构&#xff0c;并提供实用的性…

HCIA笔记3--TCP-UDP-交换机工作原理

1. tcp协议 可靠的连接 1.1 报文格式 1.2 三次握手 1.3 四次挥手 为什么TIME_WAIT需要2MSL的等待时间&#xff1f; &#xff08;a&#xff09; 为了实现可靠的关闭 &#xff08;b&#xff09;为了让过期的报文在网络上消失 对于(a), 假设host发给server的last ack丢了。 ser…

[Redis#2] 定义 | 使用场景 | 安装教程 | 快!

目录 1. 定义 In-memory data structures 在内存中存储数据 2. 优点&#xff01;快 Programmability 可编程性 Extensibility 扩展性 Persistence 持久化 Clustering 分布式集群 High availability 高可用性 ⭕快速访问的实现 3. 使用场景 1.Real-time data store …

Dubbo源码解析-服务调用(七)

一、服务调用流程 服务在订阅过程中&#xff0c;把notify 过来的urls 都转成了invoker&#xff0c;不知道大家是否还记得前面的rpc 过程&#xff0c;protocol也是在服务端和消费端各连接子一个invoker&#xff0c;如下图&#xff1a; 这张图主要展示rpc 主流程&#xff0c;消费…

Postman之newman

系列文章目录 1.Postman之安装及汉化基本使用介绍 2.Postman之变量操作 3.Postman之数据提取 4.Postman之pm.test断言操作 5.Postman之newman Postman之newman 1.基础环境node安装1.1.配置环境变量1.2.安装newman和html报告组件 2.newman运行 newman可以理解为&#xff0c;没有…

shell脚本(五)

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

人口老龄化社区服务|基于springboot+vue的人口老龄化社区服务与管理平台(源码+数据库+文档)

目录 基于springbootvue的人口老龄化社区服务与管理平台 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云…