什么是环境变量
- 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,即环境变量是由操作系统提供的
- 环境变量区别与普通变量,是因为它是一个有特殊意义的全局变量
- 环境变量可以被子进程继承下去
常见的环境变量
PATH:指定命令的搜索路径
HOME:制动用户的注工作目录
SHELL:当前的shell,它的值通常是 /bin/bash
查看环境变量
echo $Name
$ 即表示提取环境变量
name 是所查看的环境变量的名称
echo $ PATH 即可以查看命令所在的路径
测试PATH
- 创建hello.c 文件
1 #include <stdio.h>
2
3 int main()
4 {
5 printf("hello world!\n");
6 return 0;
7 }
- 用./hello 和 hello 分别运行,有什么发现?
这里我们发现,只有./hello 可以正常运行,而直接hello 则找不到命令。 - 思考:为什么运行系统的命令(例如 ls)不带执行路径却不会出错?
因为./hello 和 ls 都有系统设置的默认执行路径,而我们的二进制程序在系统中并没有被设置默认执行路径。 - 有什么方法去解决?
由上面的思考,我们知道只要把自己程序的执行路径也设置在系统中,这样我们就可以直接用自己的命令了。
此时我们就需要将自己程序的所在路径添加到环境变量PATH中:
添加方法:export PATH=$PATH:(自己程序的路径) 完成对两部分的拼接
pwd 可直接得到当前程序的运行路径
- 如下图:
和环境变量相关的指令
- echo:显示某个环境变量的值
- export:设置新的环境变量
- env:显示所有环境变量
- unset:清除环境变量
- set:显示本地定义的shell 变量和环境变量
导出/获取环境变量
环境表:每个程序都有一张存储PATH的环境表,环境表其实就是一个字符指针数组(char *env[]),每个指针指向一个以 ‘\0’ 结尾的环境字符串。
导出环境变量操作的本质是由系统新建一个字符串,用指针指向它,再把指针存在env[]数组中。
导出环境变量的方法:
1) 通过命令行的第三个参数获取
1 #include <stdio.h>
2
3 int main(int argc,char*argv[],char* env[]) //第二个参数是输入的命令
4 {
5 int i=0;
6 for(;env[i];i++)
7 {
8 printf("%s\n",env[i]);
9 }
10 return 0;
11 }
2)通过environ 获取
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main(int argc,char* argv[])
5 {
6 extern char** environ; //声明:告诉系统我要用这张表
7 int i=0;
8 for(;environ[i];i++)
9 {
10 printf("%s\n",environ[i]);
11 }
12 return 0;
13 }
3)通过系统调用<stdlib.h> 中的 getenv(“PATH”)函数
1 #include <stdlib.h>
2 #include <stdio.h>
3
4 int main()
5 {
6 printf("%s\n",getenv("PATH"));
7 return 0;
8 }
环境变量博主理解的只有这么多啦~