Linux篇第六篇——环境变量(概念+作用+环境变量的查看和应用)
Posted 呆呆兽学编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux篇第六篇——环境变量(概念+作用+环境变量的查看和应用)相关的知识,希望对你有一定的参考价值。
⭐️这篇博客就要开始聊一聊进Linux下环境变量相关内容了,相信大家或多或少都听过环境变量这个词把,我们在Windows操作系统下也能够看到它,而且我们之前应该都有配置过这个玩意,但是却不理解这是个啥,今天我就带大家来了解一下这个小玩意儿~
目录
🌏概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,它是系统中某些具有全局性质的变量,通常是为了满足某些系统的需求
环境变量=变量名+变量内容(路径)
常见的几个环境变量
- PATH : 指定命令的搜索路径
- HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
- SHELL : 当前Shell,它的值通常是/bin/bash
环境变量的查看
ehco $NAME 这里NAME指的是环境变量名
实例演示
🌏为什么要有环境变量?
系统的全局变量,都是为了方便用户、开发者和系统进行某种最简单的查找和定位,确认等等问题
给大家看一个例子:
通常,我们在使用ls、pwd这些指令时,我们是不需要带上路径的,而我们运行一个程序时,我们需要带上路径,这是为什么呢?
看下面的图,我们可以看到,ls这个指令的路径被写进环境变量PATH中了,所以,当我们执行ls这个指令时,系统会在环境变量PATH下挨个搜索路径,找到就执行,没找到就报错
那现在又有一个问题:我们的程序能不能用同样的方法实现不带路径就可以执行程序呢?
答案是肯定的。我们只需要将我们的程序所在路径导出到PATH中就可以
实例演示: 用export PATH+$PATH:path 导出环境变量(重启后自动失效,可以通过把改程序拷贝到user/bin路径下,永久生效,但是不建议,会污染Linux的命令池)
这样myproc就也可以想ls一样跑起来了。
思考: ls如何实现列表参数?
在C/C++中,main函数其实是有三个参数的,如下:
int main(int argc, char* agrv[], char* env[])
;
其中第一个参数就是指列表参数的个数,一般默认为一个,第二个参数是一个指针数组,里面存放的就是char类型的指针,指向的是字符串,这些字符串对应着的就是不同的参数
看下面一段代码:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[], char *env[])
int i = 0;
for (; i < argc; ++i)
cout << "argv["<< i << "]:"<< argv[i] << endl;
return 0;
代码测试结果如下:
再来看一段代码:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[], char *env[])
int i = 0;
for (; i < argc; ++i)
cout << "argv["<< i << "]:"<< argv[i] << endl;
string s = "-a";
if (s==argv[1])
cout << "I am -a" << endl;
else
cout << "I am ..." << endl;
return 0;
代码测试结果如下: 从运行结果可以看出,ls可以不同参数有不同的功能,实现原理和这个是类似的
🌏环境变量相关指令
-
echo: 显示某个环境变量值
-
export: 设置一个新的环境变量
-
env: 显示所有环境变量
-
unset: 清除环境变量
-
set: 显示本地定义的shell变量和环境变量
🌏环境变量组织方式
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\\0’结尾的环境字符串,这些字符串存放的就是换变量
🌏通过代码获取环境变量
上面我们说过了,main函数有三个参数,介绍了前两个,那么第三个参数就是env指针数组,就是上面的这张图,里面存在着一个一个的环境变量
代码如下:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[], char *env[])
for (i = 0; env[i]; ++i)
printf("%d:%s\\n", i, env[i]);
return 0;
代码运行结果如下:
🌏通过系统调用获取环境变量
先看一个查看环境变量的函数:getenv()
如何通过代码实现pwd的功能?
我们可以通过这个函数获取环境变量PWD,如然后打印出来,这样我们每次运行程序就有pwd的功能了。
代码如下:
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[], char *env[])
cout << getenv("PWD") << endl;
return 0;
代码测试结果如下:
🌏环境变量的全局属性
环境变量通常具有全局属性,父进程的环境变量信息可以被子进程继承下去
实例演示:
代码如下:
#include <iostream>
using namespace std;
int main(int argc, char *argv[], char *env[])
cout << getenv("MYENV") << endl;
return 0;
测试结果如下:
第一次直接运行,发现没有结果
第二次导出环境变量MYENV,再次运行程序,有结果
总结: 环境变量可以被子进程继承下去,因为环境变量通常具有全局属性
🌐总结
这是环境变量主要的一些内容,其中包括如何查看,如何通过代码获取,如何通过系统调用获取,还有环境变量通常具有全局属性的测试,今天的内容就先到这里面,喜欢的话欢迎点赞支持和指正~
以上是关于Linux篇第六篇——环境变量(概念+作用+环境变量的查看和应用)的主要内容,如果未能解决你的问题,请参考以下文章