目录
1. 基本概念
2. 常见环境变量
常见环境变量指令
(1. PATH
(2. HOME
(3. SHELL
3.环境变量的组织形式
(1)通过代码如何获取环境变量
(2)普通变量与环境变量的区别
(3)命令行参数
1. 基本概念
2. 常见环境变量
PATH : 指定命令的搜索路径HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)SHELL : 当前Shell,它的值通常是/bin/bash。
常见环境变量指令
查看方法:
echo $变量名
(1. PATH
我们打印一句hello!
3. 为什么有些指令可以直接执行,不需要带路径(如访问文件夹),而我们的二进制程序需要带路径才能执行?
我们查看环境变量:
4. 将我们的程序所在路径加入环境变量PATH当中, export PATH=$PATH:hello程序所在路径
但这种修改的环境变量仅此次登录有效。
(2. HOME
这个比较简单,查看环境变量,表示的就是自己的根目录
跟登录用户有关系。
(3. SHELL
3.环境变量的组织形式
没错环境变量是以指针数组的形式存储。每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串
(1)通过代码如何获取环境变量
#include <stdio.h>
int main(int argc, char *argv[], char *env[]) //先不管前面2个参数,最后一个就是环境变量// 的指针数组,参数一般都是由其父进程传递,追跟溯源就是bash传递
{int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;
}
#include <stdio.h>
int main(int argc, char *argv[])
{extern char **environ;int i = 0;for(; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}
3. (常用)通过接口函数
getenv()
我们来问问man ,也就是我们输入getenv我们要查看的环境变量名。
我们实验下面代码:
#include <iostream>2 #include <unistd.h>3 using namespace std;4 5 int main()6 {7 cout << "begin-------------" << endl;8 cout << "打印环境变量day:" << getenv("day") << endl;9 cout << "当前PID:"<< getpid() << " 父进程PID:"<< getppid() << endl;10 cout << "end---------------" << endl;11 while (1)12 {13 }14 return 0;15 }
环境变量传递方式: bash -> 父进程A -> 子进程B
(2)普通变量与环境变量的区别
普通变量定义:
可见普通变量,我们直接就可以定义,但毕竟不是环境变量,无法查到,无法让子进程继承。当然升级为环境变量也很简单。
(3)命令行参数
我们回顾前面的代码,main函数中的前几个参数是干什么的?
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{return 0;
}
我们通过他们参数类型来简单测试一下
1 #include <iostream>2 using namespace std; 3 4 int main(int argc, char *argv[], char *env[])5 { 6 cout << "argv:"<< endl; 7 for (int i =1; i < argc; i++) 8 { 9 cout << argv[i] << endl; } 11 return 0; 12 }
意义: 可以通过指令,传入不同的参数来选择不同的功能,这一点我们输入指令时经常遇见。
结语
本小节就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区评论,如果给小伙伴带来一些收获请留下你的小赞,你的点赞和关注将会成为博主创作的动力。