Linux操作系统学习---初识环境变量

news2024/11/26 8:27:41

目录

 ​编辑

环境变量的概念:

  小插曲:main函数的第一、二个参数

获取环境变量信息:

  1.main函数的第三个参数

  2.查看单个环境变量

  3.c语言库函数getenv()

  和环境变量相关的操作指令:

  1.export---导出环境变量:

  2.unset---清除环境变量:

  3.env指令

   4.set---显示所有环境变量和本地变量:

环境变量的特性:

  1.可以被子进程继承的全局性:

  2.由bash引入

结尾;


环境变量的概念:

  环境变量的基本格式是 "内容"="内容",中间不能用空格分开。粗略一点来说,他是程序执行时所依赖文件的路径。

  先思考一个问题:为啥我们在运行代码时非得像下面这样加上 ./ ,而执行系统的指令又不用呢(如下图)?这就和今天的环境变量有关了。

  小插曲:main函数的第一、二个参数

  main函数实际可以有三个参数,这里先介绍两个,一个是整形;另一个是字符指针数组(形参名称具体是啥不重要哈),第二个参数也叫命令行参数。

  下面通过例子来帮助理解:main函数的第一个整形参数代码接收指令的个数,第二个字符指针数组参数存放每个指令字符串的首地址。

  可以看到运行 用./code执行这个可执行程序时我象征性的带了四个选项,都被这两个参数记录下来了。由于Linux下的指令大多也是用c语言实现,因此使用的系统指令时可以带各种选项就是通过这个原理来实现的。

  当然这里也有蹊跷,我们自己的程序要加上 ./来指定当前路径运行,而系统的指令(如ls、pwd)等等就不用,这就和环境变量有关。

获取环境变量信息:

  1.main函数的第三个参数

   这里我们补充main函数的第三个参数,它和第二个参数一样也是字符指针数组,不同的是它存放各个环境变量字符串的首地址。

  下面的程序打印出的arr数组的内容很多,都是和刚才的env指令显示一样的环境变量。

  2.查看单个环境变量

  刚才都是一次性显示所有的环境变量,这次咱挑其中一个瞧瞧----它就是环境变量PATH,可以以下方式查看它的内容:

  不难看出就是一堆不同的路径,用 : 来分隔。其实我们在执行一个指令时,命令行解释器bash就会默认到这里面去寻找对应的文件并执行其中的内容,系统级的指令(如ls)就在这些路径中的一个里,而我们自己写的程序则没有,就需要使用 ./ 来告诉bash在当前目录下执行。

  3.c语言库函数getenv()

  c语言<stdlib,h>头文件里有一个getenv函数,原型如下,它接受环境变量名称,返回环境变量内容。

  和环境变量相关的操作指令:

  1.export---导出环境变量:

   格式如下,这样可以自己手动添加环境变量。

  2.unset---清除环境变量:

  格式如下,这样可以删除环境变量。

  

  3.env指令

  运行env后可以看到环境变量的内容还蛮多的,在这里就不展示了,有些一看就知道是啥,有的需要着重了解,可以解开一些之前学习时的疑惑。

   4.set---显示所有环境变量和本地变量:

    set指令相较于env更近一层,不仅显示显示环境变量,还显示本地变量()。

环境变量的特性:

  1.可以被子进程继承的全局性:

  由于子进程创建时会和父进程公用一份代码和数据,所以自然而然环境变量也是共同使用的。下面通过在代码中创建子进程来验证

从上面的代码执行结果可以看到父进程先打印了环境变量(有时候子进程先打印),随后进程进行打印,二者打印的内容相同。

  2.由bash引入

  如果使用上面提到的export向系统里添加自己的环境变量或者删除系统本身的环境变量,接着退出系统后重新进入,就会惊奇的发现环境变量貌似自动初始化了。

  上述情况的发生是因为环境变量是存储在操作系统中的,在打开一个新终端时,bash进程创建,从系统的配置文件里读取环境变量,相当于我们正常情况下访问到的环境变量只是一份拷贝,当退出终端后这种文件就会销毁,下一次登陆时又是新的bash进程从配置文件里读取未改变的环境变量。

结尾;

  通过上面的认知,咱就可以明白为啥运行自己的可执行时为啥要用  ./ ,而运行系统指令就不需要的原因了。因为存在环境变量PATH,其中就包含了系统指令的当前的执行目录,因此bash可以直接找到系统指令的执行路径(如ls的),但我们的程序路径不存在于PATH中,就需要通过.来自定当前的路劲。

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

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

相关文章

跨平台应用开发框架(1)----Qt(组件篇)

目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…

mysql索引失效的五种情况

第一种 违反最左前缀法则 这个是针对联合索引的。 假设有个tb_seller表&#xff0c;现在给三个字段建立联合索引&#xff0c;建立的时候字段顺序不可随便设置&#xff0c;字段顺序&#xff1a; name, status, address。下图Seq_in_index对应的是联合索引顺序。 判断索引失效用…

H3C OSPF 多区域实验

目录 前言 实验拓扑 实验需求 实验解析 路由器配置 测试 前言 此篇文章为 OSPF多区域试验&#xff0c;建议先食用OSPF单区域实验&#xff0c;理解实验原理 学习基本配置&#xff0c;再来使用此篇&#xff0c;效果更佳&#xff01;&#xff08;当然如果你已经了解原理与基…

算法 Java实现

一.查找算法 1.分块查找 二.排序算法 1.冒泡排序

优先算法 —— 双指针系列 - 快乐数

1. 快乐数 题目链接&#xff1a; 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/happy-number/description/ 2. 题目解析 示例1&#xff1a; 示例2&#xff1a; 3. 算法原理 两种情况&#xff1a;我们可以把两种情况都看作为循环&#xff0…

【机器学习】——卷积与循环的交响曲:神经网络模型在现代科技中的协奏

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

php 导出excel 一个单元格 多张图片

public function dumpData(){error_reporting(0); // 禁止错误信息输出ini_set(display_errors, 0); // 不显示错误$limit $this->request->post(limit, 20, intval);$offset $this->request->post(offset, 0, intval);$page floor($offset / $limit) 1 ;$wh…

几天游记啊

绿灯常亮&#xff0c;黄灯闪&#xff0c;就是没有上线状态 一 2024.11.24 青浦圆通信息中心&#xff1a;vsphere client IDC运维专员可能就这项技能稀缺 二 2024.11.25 1 字节服务器外包单位有孚网路 什么互联网交换中心 不了解的人还以为是国家火炬计划呢&#xff01;实际…

【C++动态规划 子集状态压缩】2002. 两个回文子序列长度的最大乘积|1869

本文涉及知识点 C动态规划 位运算、状态压缩、枚举子集汇总 LeetCode2002. 两个回文子序列长度的最大乘积 给你一个字符串 s &#xff0c;请你找到 s 中两个 不相交回文子序列 &#xff0c;使得它们长度的 乘积最大 。两个子序列在原字符串中如果没有任何相同下标的字符&…

记录:从.Net程序的内存转储文件中提取内存数据过程

1.准备材料&#xff1a;xxx.dump转储文件&#xff0c;VS2022 2.提取过程 使用VS打开xxx.dump文件VS中点击 调试托管内存 按钮查找需要导出的变量&#xff0c;注&#xff1a;通过类型查找时基础变量类型跟原类型不一样&#xff0c;如string对应String&#xff0c;bool对应Bool…

Nacos学习文档

目录 1、Nacos是什么2、Nacos名词介绍3、Nacos中的data id是如何组装的&#xff1f;4、Nacos 融合 Spring Cloud&#xff0c;成为注册配置中心4.1、Maven依赖作用4.2、启动配置管理4.2.1、添加依赖4.2.2、在 bootstrap.yml&#xff08;也支持properties格式&#xff09; 中添加…

QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现

案例需求&#xff1a; 完成数据库插入&#xff0c;删除&#xff0c;修改&#xff0c;查看操作。 分为 插入&#xff0c;删除&#xff0c;修改&#xff0c;查看&#xff0c;查询 几个模块。 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget…

【Linux学习】【Ubuntu入门】2-3 make工具和makefile引入

1.使用命令新建三个.c文件vi main.c&#xff0c;vi input.c&#xff0c;vi caclcu.c&#xff0c;两个.h文件vi input.h&#xff0c;vi caclcu.h 2.vi Makefile&#xff1a;新建Makefile文件&#xff0c;输入一下内容 注意&#xff1a;命令列表中每条命令前用TAB键&#xff0c;不…

Gazebo仿真实现无人机+Apriltag码动态跟踪

目录 演示 一、环境 二、配置 创建模型 首先相机创建 添加相机 Apriltag创建 地图添加apriltag码 Apriltag_ros配置 三、代码运行 四、问题 修改相机模型的参数 演示 一、环境 ROSgazebo配置 Px4Mavros Apriltag_ros编译 二、配置 在默认的mavros_posix_sitl.l…

H.265流媒体播放器EasyPlayer.js播放器提示MSE不支持H.265解码可能的原因

随着人工智能和机器学习技术的应用&#xff0c;流媒体播放器将变得更加智能&#xff0c;能够根据用户行为和偏好提供个性化的内容推荐。总体而言&#xff0c;流媒体播放器的未来发展将更加注重技术创新和用户互动&#xff0c;以适应不断变化的市场需求和技术进步。 提示MSE不支…

加菲工具 - 好用免费的在线工具集合

加菲工具 https://orcc.online AI 工具 集合了目前主流的&#xff0c;免费可用的ai工具 文档处理 pdf转word、office与pdf互转等等工具都有链接 图片图标 统计了好用免费的在线工具 编码解码 base64编码解码、url编码解码、md5计算、进制转换等等 其它 还有其他好用的…

【linux学习指南】初识Linux进程信号与使用

文章目录 &#x1f4dd;信号快速认识&#x1f4f6;⽣活⻆度的信号&#x1f4f6; 技术应⽤⻆度的信号&#x1f309; 前台进程&#xff08;键盘&#xff09;&#x1f309;⼀个系统函数 &#x1f4f6;信号概念&#x1f4f6;查看信号 &#x1f320; 信号处理&#x1f309; 忽略此信…

今天你学C++了吗?——C++中的类与对象(第二集)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

Anaconda3 2024 jupyter notebook 配置默认文件路径

我的版本如下&#xff1a; 第一步&#xff1a; 打开命令行anaconda prompt &#xff0c; 敲下面命令生成配置文件 jupyter notebook --generate-config 如下图&#xff1a; 修改配置jupyter_notebook_config.py 文件中搜索c.ServerApp.root_dir &#xff08; 对于 Anac…

【抓包专题】burpsuitProxifier小程序抓包

抓包系列文章 burpsuit&Proxifier&小程序抓包 抓包系列文章前言一、工具下载二、获取证书并安装到本地三、抓包测试 前言 抓包是进行渗透的第一步&#xff0c;包都抓不到&#xff0c;渗透就不要谈了&#xff0c;废话少说&#xff0c;开干 一、工具下载 Proxifier安装使…