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

【Linux系统化学习】命令行参数 | 环境变量的再次理解

=========================================================================

个人主页点击直达:小白不是程序媛

Linux专栏:Linux系统化学习

代码仓库:Gitee

=========================================================================

目录

mian函数传参获取环境变量

手动添加环境变量

导出环境变量

environ获取环境变量

本地变量和环境变量的区别

Linux的命令分类

常规命令

内建命令

环境变量相关指令


mian函数传参获取环境变量

上篇文章中我们介绍到C/C++的mian函数是有两个参数的,其实main函数还有第三个参数是用来获取我们的环境变量的。

   1 #include<stdio.h>2 #include<stdlib.h>3 #include<string.h>4 #include<sys/types.h>5 #include<unistd.h>6 int main(int argc ,char * argv[],char * env[])7 {8     int i=0;9     for(;env[i];i++)10     {11         printf("pid: %d , env[%d]:%s\n",getpid(),i,env[i]);                                12     }13 }

 

左边是我们使用指令env得到的结果,右边是我们运行上面得到的结果;对比两者得到的内容,我们会发现是一样的 。其实当我们使用指令启动进程时候都是shell/bash的子进程,因此子进程的命令行参数和环境变量,都是父进程给我们传递的。

父进程确实可以将环境变量传递给子进程,说明父进程是有环境变量的但是父进程shell/bash的环境变量是哪来的呢?

要解决这个问题我们还要回顾上篇文章的内容,上篇文章我们提到环境变量是可以修改的如果我们不小心修改错了会怎么办呢?不妨上手试一试。

模拟误操作后我们会发现一些基础的指令使用不了了,不必担心只需要重新启动我们的xshell即可。

通过这个小实验我们可以证明:

  • 环境变量信息是以脚本配置文件的形式存在的。
  • 我们更改的是bash进程内部的环境变量信息,每一次重新登录,都会给我们形成新的bash解释器并且新的bash解释器自动读取环境变量配置文件形成自己的环境变量信息 。

这个配置文件是存在在我们家目录的一个隐藏文件

因此上面的问题都解释通了:每一次验证登录时bash都会读取.bash_profile这个配置文件中的内容,为bash生成一张环境变量信息表。


手动添加环境变量

Linux下添加环境变量并没有指令,按照系统内自定的环境变量格式直接在命令行中输入即可。

我们手动设置的环境变量其实是本地变量,并不在系统的环境变量表中。

导出环境变量

export+环境变量名+环境变量内容

但是我们导出的环境变量只存在于bash进程中的环境变量表中,退出后重新登录后依然不存在。 

因此我们想要添加自己的环境变量要在上面提到的配置文件中添加。

 

上面中也给大家演示了一种错误不要带空格。

系统环境变量具有全局属性,是会被所有的进程继承下去的。


environ获取环境变量

C语言中有两个全局变量一个是error(错误码)一个是environ,其中environ是一个二级指针指向环境变量表的首个字符串的地址。

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


结合上篇文章我们就介绍了三种获取环境变量的方式

  • getenv
  • main函数传参
  • environ

本地变量和环境变量的区别

  • 本地变量只在bash内部有效,不会被子进程继承下去。
  • 环境变量通过让所有的子进程继承的方式实现全局性!

Linux的命令分类

我们误操作环境变量后有些大部分的命令是执行不了的,这些命令就是常规命令;但是像echo命令依然可以执行,这些命令就是内建命令。

常规命令

shell创建一个子进程,让子进程执行的。

内建命令

shell命令行的一个函数当然可以直接读取shell内部定义的本地变量。


环境变量相关指令

  • echo: 显示某个环境变量值
  • export: 设置一个新的环境变量
  • env: 显示所有环境变量
  • set: 显示本地定义的shell变量和环境变量
  • unset 取消环境变量

这篇文章结合上篇文章就把Linux中命令行参数和环境变量就介绍完了;在后面的文章中我们还会再次涉及到。希望大家读完后有很大的收获,也可以在评论区点评文章中的内容和分享自己的看法。您三连的支持就是我前进的动力,感谢大家的支持!!!

http://www.lryc.cn/news/256857.html

相关文章:

  • 【STM32】TIM定时器编码器
  • 力扣44题通配符匹配题解
  • windows系统安装RocketMQ_dashboard
  • ATECLOUD电源自动测试系统打破传统 助力新能源汽车电源测试
  • 如何教会小白使用淘宝API接口获取商品数据
  • Redis有序集合对象
  • 【C++数据结构 | 字符串速通】10分钟秒杀字符串相关操作 | 字符串的增删改查 | 字符串与数组相互转换
  • 运动重定向:C-3PO
  • 天池SQL训练营(四)-集合运算-表的加减法和join等
  • thinkphp lists todo
  • 【Flutter】创建应用顶级组件,应用根组件 (学习记录)
  • AI材料专题报告:AI革命催生新需求国产替代推动新方向
  • JVM 分析GC日志
  • 阿里云服务器环境配置,ssh免密登录和配置docker
  • 【LeetCode】2621. 睡眠函数
  • 网络入门---TCP通信实现
  • neuq-acm预备队训练week 8 P2661 [NOIP2015 提高组] 信息传递
  • 《C++新经典设计模式》之第18章 备忘录模式
  • OWASP安全练习靶场juice shop-更新中
  • 当使用RSA加密,从手机前端到服务器后端的请求数据存在+
  • BUUCTF crypto做题记录(3)新手向
  • SpringMVC修炼之旅(2)基础入门
  • matlab 最小二乘拟合空间直线(方法二)
  • ASPICE-汽车软件开发能力评级
  • 准确!!!在 CentOS 8 上配置 PostgreSQL 14 的主从复制
  • leetcode 1466
  • 想学编程,但不知道从哪里学起,应该怎么办?
  • Python数据科学视频讲解:Python概述
  • 数据结构之内部排序
  • 软考高级备考-系统架构师(机考后新版教材的备考过程与资料分享)