您现在的位置是:首页 > 编程 > 

环境变量简介

2025-07-26 20:38:38
环境变量简介 一·概述:环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。也就是简单的说是:常见环境变量: PATH : 指定命令的搜索路径。 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。 SHELL : 当前Shell,它的值通常是/

环境变量简介

一·概述:

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。

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

也就是简单的说是:

常见环境变量:

PATH : 指定命令的搜索路径。 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。 SHELL : 当前Shell,它的值通常是/bin/bash。

查看环境变量方法:

echo $AME //AME:你的环境变量名称。

下面我们来讲一下命令行参数:

也就是main函数是有参数的:

argc根据我们在可执行程序后面的参数个数推断,ar数组内放的字符串就是我们命令行所给的参数组成的数组:如ls -al :可以理解成ls是一个把main函数编译好的可执行程序,而后面的-al就是命令行参数;下面用一个例子演示一下:

这样一展示的话,我们就明白了那些指令原来是这么设计的吧。

那问题来了,我们怎么知道这个程序在哪,然后再去main函数里面对应的执行相应命令行参数对应的功能呢? 根据所学的,我们可以明白命令行是bash控制的,那么也就是bash去。

去哪:就是环境变量PATH的应用了。

这样就和我们的环境变量联系在一起了。

那么PATH是怎样操作:

下面可能会有个疑问:

为什么此时要加入./才能运行, 因为此时生成的可执行文件在当前目录,而没有在PATH中,不告诉它就会默认到这里面,会不到,因此这样写如果非要让成立可以把当前路径加在PATH后面:也就是PATH=$PATH:当前路径。但是如果退出来再重新登录就会消失,后面会讲解怎么样才可以导入并且不消失。

二·对bash的两个表介绍:

等后面我们就用可以获得环境变量的environ把这张表打印出来当然也可以用env后面会讲到。

这里我们只需要了解bash是如何操作我们命令行输入的命令的就可。

这里我们讲一个小插点:

我们上面不是讲了PATH的覆盖;如果我们直接把它覆盖而不是后面的“拼接”;也就是直接PATH=当前路径;那么此时我们会发现一些指令如ls等都不能用了;而export,cd等却可以这是为啥?

因为我们比如执行的刚刚的等程序,是通过子进程调用完成的,而我们之前学过,子进程默认虽然是和父进程一样数据等,但是会发生写实拷贝:当我们覆盖的是子进程的环境变量;但是父进程没有变化,而像上面export等是父进程bash直接操控的,属于内建命令;故还是可以执行的。

三·环境变量的操作: .1命令行操作:.1.1 env:

这里就比较简单,演示一下就好,会把整张环境变量参数的表展示出来:

ubuntu展示:

这里我们常见认识这些就可;其中OLDPWD的设计就是为了方便我们su 命令可以正常使用,这些了解一下即可。

.1.2 echo $+name:

这里的 $:就是对环境变量名字的执行解释。

.1. export:

这里export 环境变量名字=内容;下面展示下效果:

env效果 :

但是这里如果直接用export命令行导入最后只要退出终端,那么导出到env的环境变量就会消失(后面我们会讲述在vim中修改的操作,这样它不会消失只有vim中删掉并且unset掉才会真正消失)

.1.4 unset:

用来取消导出到或者写入到env中的环境变量;

用法:unset + name

这是我们用export导出进env的环境变量ff=home.:

下面我们用unset去除一下:

.2代码操作:.2.1 getenv("AME") :

这里它会有一个头文件也就是#include<stdlib.h>;

返回一个字符串,在代码中使用;下面演示一下:

代码语言:javascript代码运行次数:0运行复制
#include<string.h>
#include<stdio.h>
#include<stdlib.h>

int main(){
ct char *who = getenv("USER");
if(who == ULL) return 1;

if(strcmp(who, "sw")==0)
{
    printf("这是程序的正常执行逻辑\n");
}
 else
 {
     printf("Only sw!!\n");
 }
}

这样我们就会使用它了。

.2.2 environ :

用的时候必须声明一下;它相当于是一个二级指针,指向的是环境变量表第一个数据(char*);因此可以利用数组的形式去访问这张表(但是一访问就是全部,或者不知道访问哪个的位置;因此一般代码内我们使用getenv()):

代码语言:javascript代码运行次数:0运行复制
#include<stdlib.h>
#include<stdio.h>
extern char **environ;
int main(){
for(int i = 0; environ[i]; i++)
      {
         printf("environ[%d]-> %s\n", i, environ[i]);
     }
}

因此不太建议用。

.vim修改操作:

这里我们可以进入vim修改这样就解决了export设置后但是重登系统就会消失的问题。

如果是centos7等就会有.bash_profile,在这里面直接用vim编辑添加就好。下面我们展示一下ubuntu的操作:

回到根目录有个.bashrc的文件用vim打开它(里面是默认补充的)。

接下来我们用vim里面写入格式:export 名字=内容。

但是我们直接echo它的内容是看不到的;需要刷新一下:

代码语言:javascript代码运行次数:0运行复制
1· source ~/.bashrc
2. source ./.bashrc

这两种方式都可以。

当我们unset的时候,虽然env展示的没了,但是一刷新又会出现因此还要在.bashrc里面 删掉才行。

四.额外补充:4.1本地变量:

这里我们要知道bash既有环境变量又有本地变量(只有bash来操作,它不会像环境变量一样被子进程继承)。

这就是一个本地变量;也就是只有通过bash进行命令行操作才可以执行,也就是说如果bash后的子进程是用不了的。

下面也可以放入环境变量表中。

4.2bash脚本文件:

如:我们写了一个test.sh

直接用命令

代码语言:javascript代码运行次数:0运行复制
sh test.sh

这样就运行了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-12-17,如有侵权请联系 cloudcommunity@tencent 删除进程命令行变量程序函数

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1131551.html

相关标签:无
上传时间: 2025-07-18 19:09:14
留言与评论(共有 10 条评论)
本站网友 小淼
10分钟前 发表
在代码中使用;下面演示一下:代码语言:javascript代码运行次数:0运行复制#include<string.h> #include<stdio.h> #include<stdlib.h> int main(){ ct char *who = getenv("USER"); if(who == ULL) return 1; if(strcmp(who
本站网友 北京城建集团有限责任公司
2分钟前 发表
这里它会有一个头文件也就是#include<stdlib.h>;返回一个字符串
本站网友 南京先欧仪器制造有限公司
27分钟前 发表
i
本站网友 商贸
9分钟前 发表
而后面的-al就是命令行参数;下面用一个例子演示一下:这样一展示的话
本站网友 盘整
1分钟前 发表
但是我们直接echo它的内容是看不到的;需要刷新一下:代码语言:javascript代码运行次数:0运行复制1· source ~/.bashrc 2. source ./.bashrc这两种方式都可以
本站网友 海岸城影院
21分钟前 发表
四.额外补充:4.1本地变量:这里我们要知道bash既有环境变量又有本地变量(只有bash来操作
本站网友 牛腩炖萝卜
15分钟前 发表
而我们之前学过
本站网友 新教
25分钟前 发表
它不会像环境变量一样被子进程继承)
本站网友 郑州买房
24分钟前 发表
它不会像环境变量一样被子进程继承)