Linux环境变量

环境变量

  • 一.基本概念
  • 二.常见的环境变量
    • 1.PATH:指令搜索路径
    • 2.HOME: 指定用户的主工作目录
    • 3.SHELL:当前Shell,它的值通常是/bin/bash
  • 三.查看环境变量的方法
  • 四.命令行参数
  • 五.环境变量增加和删除
  • 六.本地变量

一个问题:我们在写一段代码并编译成可执行程序后,想要执行它需要加./,而在使用ls,pwd等指令时却不需要加当前路径,这是怎么回事呢?这就要提到环境变量了。

一.基本概念

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

二.常见的环境变量

1.PATH:指令搜索路径

查看PATH

在这里插入图片描述

它的内容是由一串路径+冒号+另一串路径+冒号+…。它用冒号作为分割符,定义出了许多路径。那么像ls,pwd这些指令在执行时就会在PATH里挨个寻找路径,执行正确的路径;而我们自己的可执行程序的路径并不在定义里,所以需要加./。

我们也可以将自己的可执行程序的路径添加到PATH里。

在这里插入图片描述

2.HOME: 指定用户的主工作目录

查看HOME

在这里插入图片描述

刚登陆xshell时的目录所处的目录是/home/chz,为什么当一个用户登陆时会自动到它的家目录里呢?这是因为当你登陆xshell时,xshell会自动识别用户,然后填充该用户的HOME变量。

3.SHELL:当前Shell,它的值通常是/bin/bash

查看SHELL

在这里插入图片描述

通过$SHELL可以看到当前shell的可执行程序。

三.查看环境变量的方法

通过指令查看
在这里插入图片描述
在这里插入图片描述

通过系统接口查看

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四.命令行参数

一个小知识:main函数可以带参

在这里插入图片描述

第一个参数是整形,第二个参数是指针数组。argc代表argv里的元素个数。接下来打印出来看看。

在这里插入图片描述

在这里插入图片描述

main函数在用户层面上看是入口函数,但实际上main函数并不是第一个被调用的函数,它会先被其他函数调用,而argc,argv就是传的参。在我们看来我们输入的是./mycmd-a但bash实际上是以空格为分隔符直接解释成了"./mycmd" "-a"两个字符串。再把字串的个数存入argc,每个子串的首地址保存在argv里。将字符串打散这一过程就是命令行解析。

为什么要这么做,看一段代码

在这里插入图片描述

在这里插入图片描述

所以命令行参数有一个重要功能就是为指令提供多个选项。

main函数只有这两个参数吗

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们直接遍历env[]也可以获得全部的环境变量。并且我们可以发现这里的环境变量与env指令里的环境变量一模一样,所以其实我们写的程序的环境变量是继承于父进程的。这也是为什么环境变量具有全局性。

结论:我们所运行的进程,都是子进程,bash本身在启动的时候,会从操作系统的配置文件中读取环境变量信息,子进程会继承父进程交给我的环境变量!

五.环境变量增加和删除

增加

在这里插入图片描述

在这里插入图片描述

同时在这里也可以通过执行自己写的子程序发现子程序里的环境变量也有了MY_VALUE,进而进一步验证了环境变量是由父进程里继承而来的。

删除

在这里插入图片描述

六.本地变量

本地变量就是我们可以直接在命令行里定义的变量

在这里插入图片描述

查看

set可以查看所有变量包括环境变量和本地变量

在这里插入图片描述

在这里插入图片描述

本地变量只在本BASH内部有效,不会继承。

又一个问题:既然本地变量不能被子进程继承,那么我们为什么可以使用echo将它打印出来呢?这其实是因为echo不需要创建子进程。

在这里插入图片描述

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

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

相关文章

Kotlin~Bridge桥接模式

概念 抽象和现实之间搭建桥梁,分离实现和抽象。 抽象(What)实现(How)用户可见系统正常工作的底层代码产品付款方式定义数据类型的类。处理数据存储和检索的类 角色介绍 Abstraction:抽象 定义抽象接口&…

《Go 语言第一课》课程学习笔记(五)

入口函数与包初始化:搞清 Go 程序的执行次序 main.main 函数:Go 应用的入口函数 Go 语言中有一个特殊的函数:main 包中的 main 函数,也就是 main.main,它是所有 Go 可执行程序的用户层执行逻辑的入口函数。 Go 程序在…

一起创建Vue脚手架吧

目录 一、安装Vue CLI1.1 配置 npm 淘宝镜像1.2 全局安装1.3 验证是否成功 二、创建vue_test项目2.1 cmd进入桌面2.2 创建项目2.3 运行项目2.4 查看效果 三、脚手架结构分析3.1 文件目录结构分析3.2 vscode终端打开项目 一、安装Vue CLI CLI:command-line interface…

日常BUG——微信小程序提交代码报错

😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 在使用微信小程序开发工具进行提交代码时,报出如下错误: Invalid a…

Git提交规范指南

在开发过程中,Git每次提交代码,都需要写Commit message(提交说明),规范的Commit message有很多好处: 方便快速浏览查找,回溯之前的工作内容可以直接从commit 生成Change log(发布时用于说明版本…

5、flink任务中可以使用哪些转换算子(Transformation)

1、什么是Flink中的转换算子 在使用 Flink DataStream API 开发流式计算任务时,可以将一个或多个 DataStream 转换成新的 DataStream,在应用程序中可以将多个数据转换算子合并成一个复杂的数据流拓扑图。 2、常用的转换算子 Flink提供了功能各异的转换算…

[论文笔记]ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE

引言 这是论文ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE的阅读笔记。本篇论文提出了通过Pre-LN的方式可以省掉Warm-up环节,并且可以加快Transformer的训练速度。 通常训练Transformer需要一个仔细设计的学习率warm-up(预热)阶段:在训练开始阶段学习率需要设…

JDK 1.6与JDK 1.8的区别

ArrayList使用默认的构造方式实例 jdk1.6默认初始值为10jdk1.8为0,第一次放入值才初始化,属于懒加载 Hashmap底层 jdk1.6与jdk1.8都是数组链表 jdk1.8是链表超过8时,自动转为红黑树 静态方式不同 jdk1.6是先初始化static后执行main方法。 jdk1.8是懒加…

设置PHP的fpm的系统性能参数pm.max_children

1 介绍 PHP从Apache module换成了Fpm,跑了几天突然发现网站打不开了。 页面显示超时,检查MySQL、Redis一众服务都正常。 进入Fpm容器查看日志,发现了如下的错误信息: server reached pm.max_children setting (5), consider r…

python中的svm:介绍和基本使用方法

python中的svm:介绍和基本使用方法 支持向量机(Support Vector Machine,简称SVM)是一种常用的分类算法,可以用于解决分类和回归问题。SVM通过构建一个超平面,将不同类别的数据分隔开,使得正负样…

2023全国大学生数学建模竞赛A题B题C题D题E题思路+模型+代码+论文

目录 一. 2023国赛数学建模思路: 赛题发布后会第一时间发布选题建议,思路,模型代码等 详细思路获取见文末名片,9.7号第一时间更新 二.国赛常用的模型算法: 三、算法简介 四.超重要!!&…

msvcp140.dll丢失的解决方法,如何预防msvcp140.dll丢失

在电脑操作系统中经常会弹出类似msvcp140.dll丢失的错误提示窗口,导致软件无法正常运行。为什么会出现msvcp140.dll丢失的情况呢?出现这种情况应该如何解决呢?小编有三种解决方法分享给大家。 一.msvcp140.dll丢失的原因 1.安装过程中受损:在…

前端框架学习-ES6新特性(尚硅谷web笔记)

ECMASript是由 Ecma 国际通过 ECMA-262 标准化的脚本程序设计语言。javaScript也是该规范的一种实现。 新特性目录 笔记出处:b站ES6let 关键字const关键字变量的解构赋值模板字符串简化对象写法箭头函数rest参数spread扩展运算符Promise模块化 ES8async 和 await E…

云原生周刊:Kubernetes v1.28 新特性一览 | 2023.8.14

推荐一个 GitHub 仓库:Fast-Kubernetes。 Fast-Kubernetes 是一个涵盖了 Kubernetes 的实验室(LABs)的仓库。它提供了关于 Kubernetes 的各种主题和组件的详细内容,包括 Kubectl、Pod、Deployment、Service、ConfigMap、Volume、…

CF1013B And 题解

题目传送门 题目意思: 给你一个长度为 n n n 的序列 a i a_i ai​,再给一个数 x x x。每一步你可以将序列中的一个数与上 x x x。请问最少要多少步才可以使得序列中出现两个相同的数,如果无解输出 − 1 -1 −1。 思路: 首…

Vue页面刷新常用的4种方法

Vue项目里,有时候我们需要刷新页面,重新加载页面数据,常用方法如下: 方法一:location.reload() 方法全局刷新 使用 location.reload() 方法可以简单地实现当前页面的刷新,这个方法会重新加载当前页面,类似于用户点击浏览器的刷新按钮。 在 Vue 中,可以将该方法绑定到…

题解 | #M.Fair Equation# 2023牛客暑期多校10

M.Fair Equation 签到题 题目大意 给定一个式子 A B C ABC ABC ,其中正整数 A , B , C ≤ 1 0 6 A,B,C\le 10^6 A,B,C≤106 问能否在 A , B , C A,B,C A,B,C 其中一个数的某一位置(可以是开头和结尾)插入一个数字,使得等式…

Elasticsearch 查询之Function Score Query

前言 ES 的主查询评分模式分为两种,是信息检索领域的重要算法: TF-IDF 算法 和 BM25 算法。 Elasticsearch 从版本 5.0 开始引入了 BM25 算法作为默认的文档评分(relevance scoring)算法。在此之前,Elasticsearch 使…

sip网络号角喇叭 sip音柱 POE供电广播音箱 ip网络防水对讲终端 sip网络功放

SV-7042TP网络号角喇叭 一、描述 SV-7042TP是我司的一款SIP网络号角喇叭,具有10/100M以太网接口,内置有一个高品质扬声器,将网络音源通过自带的功放和喇叭输出播放,可达到功率30W。SV-7042TP作为SIP系统的播放终端,可…

【脚踢数据结构】常见树总结(图码结和版)

(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,Linux基础,ARM开发板,软件配置等领域博主🌍快上🚘,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的…