一、概念介绍(来源:比特就业课)

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

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

二、现象引入与解答

1.为什么像ls这样的系统指令可以直接执行,而我们生成的可执行程序不能像这样运行呢,而应该写成路径+文件名的形式呢?
在这里插入图片描述
解答:因为系统指令ls会自动默认的去环境变量PATH中去查找,若能够在众多路径下找到,便能够成功执行,否则报以上错误。可以见一见:
在这里插入图片描述
可以看到ls是可以找到的,PATH环境变量的值中路径用:分隔,查找时从左到右依次查找。(解决方法最后)
2.main函数有没有参数呢?
解答:其实是有的,那么参数有哪些呢?这里我把他们全部展示出来,见如下:
在这里插入图片描述
3.这些参数是由哪个传递的呢?
解答:其实是该程序的父进程Shell(bash)传递的。
4.前连个参数具体代表什么呢?
解答:我们在命令行中输入的任何指令,比如“ ls -a -l”都是以字符串(整体)的形式给到bash进程进行分割处理,得到“ls”, “-a”,“-l”,然后用一个char* argv[]把分割的字符串给管理起来,这样一张表就叫做“命令行参数表”,“ls”就是我们要执行的程序,“-a,“-l”是选项,用于实现该程序的不同的子功能,其中argc就是分割后字符串的个数,argv用NULL结尾,表示参数传递完毕。为了能够更形象,可见下图:在这里插入图片描述
在这里插入图片描述
5.最后一个参数代表什么呢?
解答:首先我们需要明确,要执行一个程序,必须先找到它,其次系统中的环境变量(PATH)是用来帮助系统找到要执行的目标二进制文件,是系统中搜索指令的默认搜索路径!环境变量的形式为:名称=内容(这种类似键值的形式)。如何理解环境变量呢?需要从存储的角度,即bash会形成一张环境变量表,该环境变量表同命令行参数表一样也是char* argv[]类型的,那么环境变量,最开始是从哪里来的呢?答案是从系统的相关配置文件中来的,见图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
举例说明:比如执行ls命令就回到PATH中去找,又比如cd ~指令,就会找到HOME这个环境变量。
在这里插入图片描述
结论:bash会有两张表,一张叫命令行参数表argv,另一张叫环境变量表env(重要)
推导:如果Linux系统有10个用户登录,就存在10个bash,那么每个bash都会有从配置文件中来的环境变量,形成一张环境变量表

三、获取环境变量的方法

指令方式:
①export 环境变量(需要注意的是,export属于内建命令,不会创建新进程,export会被bash直接执行,调用相关的系统调用)
在这里插入图片描述
②env(直接运行该指令便可以看到所有的环境变量,如果做了第一个操作,那么也可在看到)
③echo $环境变量(直接显示该环境变量的内容)
在这里插入图片描述
④unset 环境变量 (直接删除该环境变量)
在这里插入图片描述
代码方式:
①方法一:父进程(bash)的环境变量可以被子进程继承
②方法二:使用getenv()
在这里插入图片描述
③方法三:extern char** environ,使用全局指针(需声明)

四、理解环境变量的特性

①环境变量具有全局特性
②bash会记录两套变量:环境变量、本地变量(本地变量不会被子进程继承,只会在bash内部被使用)

五、认识更多的环境变量

常见的:
在这里插入图片描述
HOSTNAME:主机名
TREM:终端类型(如xterm、xterm-256color、screen、vt100等)
SHELL:命令行解释器的类型
USER:用户名
PATH:默认搜索路径
PWD:记录当前用户所在的路径
HOME:家目录
LOGNAME:登录用户名
OLDPWD:记录旧的路径(举例:cd -)
HISTSIZE:定义Shell历史命令巨鹿的最大条数
LANG:定义系统的默认语言和字符编码

六、解决方法

①方法一:直接将程序移动到PATH环境变量中的任何一个路径下
②方法二:直接将程序所在的路径追加到PATH环境变量值之后(例:export PATH=$PATH:想要添加的路径)
③方法三:修改配置文件.bash_profile(适用于登录Shell)/.bashrc(适用于交互式Shell)

echo 'export MY_VAR="value"' >> ~/.bash_profile
source ~/.bash_profile
echo 'export MY_VAR="value"' >> ~/.bashrc  # 追加到文件末尾
source ~/.bashrc                           # 立即生效(无需重启)

方法四:使用export直接设置

export MY_VAR="value"  # 设置环境变量
echo $MY_VAR           # 检查是否生效
//特点:
//仅在当前 Shell 及其子进程(如新开的终端、脚本)中有效。
//重新连接 SSH 后会消失(因为新会话会重新加载 Shell 配置文件)。

七、相关代码

#include<stdio.h>
#include<stdlib.h>
//main有参数吗?有
#include<unistd.h>
int main(int argc,char* argv[],char* env[]){(void)argv;(void)argc;(void)env;extern char** environ;for(int i=0;environ[i];i++){printf("env[%d]=>%s\n",i,environ[i]);}return 0;
}//int main(int argc,char* argv[],char* env[]){
//  (void)argv;
//  (void)argc;
//  (void)env;
//  char* path=getenv("PATH");
//  printf("PATH=%s\n",path);
//  return 0;
//}//int main(int argc,char* argv[],char* env[]){
//  (void)argv;
//  (void)argc;
//  for(int i=0;env[i];i++){
//    printf("env[%d]=>%s\n",i,env[i]);
//  }
//  return 0;
//}//int main(int argc,char* argv[]){
//  for(int i=0;i<argc;i++){
//    printf("argv[%d]:%s\n",i,argv[i]);
//  }
//  return 0;
//}

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监控 Linux 服务器资源

使用 Bash 脚本监控 Linux 服务器资源并发送告警邮件前言一、&#x1f6e0;️ 脚本功能概览二、 &#x1f4dc; 脚本核心逻辑分解2.1. 变量初始化2.2. CPU 使用率监控2.3. 内存使用率监控2.4. 磁盘使用率监控2.5. 磁盘 IO 延迟监控&#xff08;await&#xff09;2.6. 网络流量监…

随机获取数组内任意元素

Math.random() * arr.length 是 JavaScript 中常用的表达式&#xff0c;用于生成一个范围在 [0, arr.length) 之间的随机浮点数&#xff08;包含 0&#xff0c;但不包含数组长度本身&#xff09;。 作用说明&#xff1a; Math.random() 生成一个 [0, 1) 区间的随机浮点数&#…

android studio gradle 访问不了

1.通过国内镜像站 2.通过本地部署 参考这个搞定 https://blog.csdn.net/2401_82819685/article/details/144542784

科普:企业微信的第三方应用涉及的“配置应用权限”

企业微信的第三方应用涉及“配置应用权限”&#xff0c;它在不同阶段含义不同&#xff1a;开发阶段意指应用自身所需的功能权限&#xff0c;安装阶段意指企业管理员对应用使用范围的控制&#xff0c;产生此歧义的问题&#xff0c;归根到低还是语言的缩写问题&#xff0c;设想一…

YOLOv11改进大全:从卷积层到检测头,全方位提升目标检测性能

## 1 引言YOLO&#xff08;You Only Look Once&#xff09;系列作为目标检测领域的重要算法&#xff0c;以其**高效推理**和**良好精度**赢得了广泛认可。2024年9月&#xff0c;Ultralytics团队正式发布了YOLOv11&#xff0c;在先前版本基础上引入了**多项架构改进**和**训练优…

JWT全面理解

目录 一、JWT是什么 1、身份认证&#xff08;最核心用途&#xff09; 2、信息交换 3、授权控制 二、JWT的核心价值 三、如何理解JWT的结构和工作原理 1、三部分结构解析 2、核心工作流程 四、JWT的使用步骤 1、添加依赖 2、添加配置文件 3、创建实体类 4、创建JWT…

量子文件传输系统:简单高效的文件分享解决方案

&#x1f310; 在线体验地址&#xff1a;https://share-file.narutogis.com/ &#x1f4e4; 项目概述 量子文件传输系统是一款基于Python Flask开发的高效文件管理与分享工具&#xff0c;致力于提供简单、安全、可靠的文件传输解决方案。系统支持用户管理、文件上传下载、自动…

基于 GitHub Actions 的零成本自动化部署:把 Vite/Vue3 项目一键发布到 GitHub Pages 的完整实战

1. 实现自动化部署1.1. 创建 vue 项目# 1. 安装/确认 Node.js&#xff08;>14&#xff09; node -v # 推荐 20.x# 2. 创建项目&#xff08;交互式&#xff0c;选 Vue3 Router 等&#xff09; npm init vuelatest github-actions-demo # 创建vite项目 # 或&#xff1a;v…

minio 文件批量下载

MinIO 批量下载功能说明 1. 功能描述 前端勾选多个对象文件后&#xff0c;一次性将这些对象从 MinIO 拉取并打包成 ZIP&#xff0c;通过浏览器直接下载。整体特性&#xff1a; 支持跨桶批量下载&#xff08;不同 bucket 的对象可同时下载&#xff09;。服务端采用流式压缩边…

机器学习11——特征选择与稀疏学习

上一章&#xff1a;机器学习10——降维与度量学习 下一章&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备[TOC] 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到…

整理python快速构建数据可视化前端的Dash库

一.Dash框架# 导入 Dash 相关库 import dash from dash import dcc, html # dcc 是 Dash 核心组件库&#xff0c;html 是 HTML 组件库 from typing import Generic# 创建一个 Dash 应用实例 app dash.Dash(__name__)# 定义应用的布局 app.layout html.Div(children[# 添加一…

RNN循环神经网络(一):基础RNN结构、双向RNN

RNN循环神经网络 什么是循环神经网络&#xff1f; 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类专门用于处理序列数据的神经网络架构。与传统的前馈神经网络不同&#xff0c;RNN具有"记忆"能力&#xff0c;能够捕捉数据中的时间依赖关系…

#C语言——刷题攻略:牛客编程入门训练(十):攻克 循环控制(二),轻松拿捏!

&#x1f31f;菜鸟主页&#xff1a;晨非辰的主页 &#x1f440;学习专栏&#xff1a;《C语言刷题合集》 &#x1f4aa;学习阶段&#xff1a;C语言方向初学者 ⏳名言欣赏&#xff1a;"代码行数决定你的下限&#xff0c;算法思维决定你的上限。" 目录 1. BC82 乘法表…

daily notes[16]

文章目录意大利语单词 **“bello”**一、核心含义二、变形规则&#xff1a;最重要的部分1. 当 “bello” 位于 **名词前面** 时2. 当 “bello” 位于 **名词后面** 或 **动词后面** 时三、用法总结与对比四、其他用法和常见表达references意大利语单词 “bello” 融合了 指示形…

【知识库】计算机二级python操作题(二)

文章目录基本操作题1基本操作题2基本操作题3简单应用题1简单应用题2综合应用题1基本操作题1考生文件夹下存在一个文件PY101.py&#xff0c;请写代码替换横线&#xff0c;不修改其他代码&#xff0c;实现以下功能&#xff0c;随机选择一个手机品牌屏幕输出。 # 请在...处使用一行…

Nginx 服务用户与防盗链配置

目录 Nginx 服务用户与防盗链配置 1. 隐藏版本号 1.1 配置方法 1.2 生效与验证 2. 修改当前程序账号 2.1 操作步骤 3. 缓存时间 3.1 配置方法 3.2 说明 4. 日志分割 4.1 实现方式&#xff08;脚本自动分割&#xff09; 5. 连接超时时间 5.1 核心超时指令&#xff0…

域格4G模块通信协议之HTTP(三):下载大文件的两种方式

域格ASR系列模块支持HTTP下载大文件&#xff0c;本文将提供两种方式。一、直接通过URC上报数据基础操作核心指令说明配置说明响应说明应用示例注意点二、HTTP Range分段下载核心指令说明注意点一、直接通过URC上报数据 若文件体积适中&#xff0c;且需要 MCU 即时处理数据&…

Android 图片 OOM 防护机制设计:大图加载、内存复用与多级缓存

1. 为什么图片加载总让 Android 开发抓狂? 图片是 Android 应用中不可或缺的元素,从用户头像到高清壁纸,从商品详情页到动态表情包,图片无处不在。然而,图片加载是内存管理的雷区,稍不留神就可能触发臭名昭著的 OutOfMemoryError(OOM)。为啥图片这么“吃内存”?原因很…

9月9日

TCP 服务器端#include <myhead.h> #define SER_PORT 8888 //服务器端口号 #define SER_IP "192.168.108.179" //服务器IP地址 int main(int argc, const char *argv[]) {//创建一个用于连接的套接字文件描述符int sfd socket(AF_INET, SOCK_STRE…