您的位置:首页 > 教育 > 培训 > 新乡网络推广外包_建e网室内设计图_全国疫情今天最新消息_seo关键词排名优化制作

新乡网络推广外包_建e网室内设计图_全国疫情今天最新消息_seo关键词排名优化制作

2025/5/9 14:56:50 来源:https://blog.csdn.net/weixin_51821336/article/details/146073775  浏览:    关键词:新乡网络推广外包_建e网室内设计图_全国疫情今天最新消息_seo关键词排名优化制作
新乡网络推广外包_建e网室内设计图_全国疫情今天最新消息_seo关键词排名优化制作

文章目录

  • 前言
  • 一、环境变量概念
    • 1.1 为什么需要环境变量?
    • 1.2 环境变量的本质特征
  • 二、环境变量PATH
    • 2.1 PATH的运作机制
    • 2.2 常见环境变量及其作用
    • 2.3 环境变量操作指南
  • 三、再谈环境变量
    • 3.1main函数命令行参数解析
    • 3.2 环境变量的继承机制
    • 3.3 本地变量与内部构建命令
  • 总结


前言

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。其在计算机中的结构形式一般是name + value(kv)
在Windows中,我们有时候在安装某种软件时也需要更改环境变量:
在这里插入图片描述


一、环境变量概念

1.1 为什么需要环境变量?

想象这样一个场景:你在寄快递时不需要每次都手动填写快递公司的地址,因为整个城市已经建立了完善的物流网络。环境变量在计算机系统中扮演着类似的角色——为程序运行提供标准化路径指引

当我们编译C/C++程序时,从来不知道所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器找到标准库的位置。

1.2 环境变量的本质特征

特性说明
全局性对当前用户的所有进程生效
持久性可通过配置文件永久保存
继承性子进程自动继承父进程环境变量
动态性运行时可以即时修改

二、环境变量PATH

2.1 PATH的运作机制

系统中,针对于指令的搜索,Linux系统会提供一个搜索指令的环境变量(PATH)。当我们在终端输入命令时,系统会按照PATH指定的路径顺序查找可执行文件。

echo $PATH	//查看环境变量中的内容
# 查看当前PATH设置
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

其中,多个路径按冒号分隔,在Linux执行指令时,会依次在路径中搜索某条指令。
在这里插入图片描述
例如ls指令,在系统搜索到 usr/bin 路径时,就找到了ls指令,遂执行。

  • /usr/local/sbin/ls ❌
  • /usr/local/bin/ls ❌
  • /usr/sbin/ls ❌
  • /usr/bin/ls ✅

而code可执行文件并不在当前系统默认指令搜索路径PATH中,因此无法执行。

在这里插入图片描述

我们可以使用以下语句,将自己的可执行文件执行路径添加到PATH中,这样就可以像使用ls指令一样使用可执行文件命令了。

export PATH=$PATH:[可执行文件路径]

在这里插入图片描述

2.2 常见环境变量及其作用

项目用途说明示例值
PATH可执行文件搜索路径/usr/bin:/bin
HOME当前用户主目录/home/user
SHELL默认Shell程序路径/bin/bash
USER当前登录用户名alice

2.3 环境变量操作指南

$ env	//查看所有环境变量
$ echo $HOME	//查看单个变量

在这里插入图片描述
除此之外,我们也可以通过c语言程序获取当前环境变量信息,需要用到系统调用函数getenv()

#include <stdio.h>
#include <stdlib.h>
int main()
{//获取PATH环境变量printf("PATH = %s\n",getenv("PATH"));printf("who = %s\n",getenv("USER"));return 0;
}

在这里插入图片描述
在USER环境变量中,随着我们切换用户(切到root),USER的值也随着发生变化,这表明了环境变量具备了识别用户的能力。

自定义环境变量:

# 临时设置
$ export MY_VAR="hello"# 永久设置(用户级)
$ echo 'export MY_VAR="hello"' >> ~/.bashrc# 永久设置(系统级)
$ sudo sh -c 'echo "MY_VAR=hello" >> /etc/environment'#取消环境变量
$ unset MY_VALUE       

三、再谈环境变量

3.1main函数命令行参数解析

命令行参数是用户在命令行中输入命令时,所附带的额外信息。它们可以提供给命令的不同选项、标志或参数值,以改变命令的行为或输出。
用来完成指令的解析工作,使命令具有不同的功能。

main函数的三个参数:参数个数、一张命令行参数表、一张环境变量表

int main(int argc, char *argv[], char *env[]) {// argc: 参数个数// argv: 命令行参数数组// env: 环境变量数组
}

命令行参数表:根据不同命令行输入执行不同的内容;
环境变量表:当前的环境变量信息,其内容与env一致

3.2 环境变量的继承机制

我们执行可执行文件main时,系统会先传入两张向量表,代表了需要执行的操作与继承父进程的环境变量信息!

我们所运行的进程都是子进程,bash启动的时候,会从操作系统的配置文件中读取环境变量信息。而子进程会继承父进程的所有环境变量(向量表方式),换句话来说,bash命令下的所有子进程的环境变量信息一致,因此环境变量具有全局属性

+----------------+
|  登录Shell     |
|  PATH=/usr/bin |
+----------------+|| fork()v
+----------------+
|  用户进程       | (继承PATH)
|  PATH=/usr/bin |
+----------------+|| execve()v
+----------------+
|  新程序        | (可修改自己的环境变量)
|  PATH=/custom |
+----------------+

3.3 本地变量与内部构建命令

类型作用域生命周期子进程可见性
环境变量全局会话持续可见
本地变量当前Shell会话持续不可见

本地变量
所谓本地变量,就是可以直接在命令行定义的变量,显然这样创建的变量并不在环境变量中。本地变量只会在本bash内有效,而不会被子进程集成。
在这里插入图片描述
使用set指令用来查看当前系统中的所有本地变量和环境变量。

为何子进程无法继承本地变量,echo同样也会创建子进程继承环境变量,为何与程序不同的是echo可以访问到本地变量MY_VALUE呢?

内部构建命令:

常规命令通过创建子进程完成,内建命令是Shell解释器的原生组成部分,它们不需要创建子进程,而是直接由Shell自身执行,类似与bash调用了自己写的或是系统提供的函数。以上说明,echo是由bash亲自执行的,同样的情况还有cd指令。


总结

掌握环境变量的正确使用方式,将显著提升开发效率和系统管理能力。建议读者通过man environ命令深入学习相关机制,并在实践中不断探索环境变量的高级用法。

👍 ​感谢各位大佬观看。如果本文有帮助,请点赞收藏支持~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com