环境变量概念以及获取环境变量(linux下解析)
目录
1 基本概念
2 常见的环境变量
3 查看环境变量方法
4 和环境变量相关的命令
5 环境变量的组织方式
6 通过代码如何获取环境变量
6.1 命令行参数
6.2 环境变量
7 通过系统调用获取或设置环境变量
1 基本概念
环境变量(environmentvariables)⼀般是指在操作系统中用来指定操作系统运行环境的⼀些参数。
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。
2 常见的环境变量
这里首先给出一个命令用来查看环境变量:env。
环境变量:
例如:
PATH:指定命令的搜索路径(如:输入的' ls' 'cp' 'mv' 直接执行,但是我们自己写的可执行程序需要 ' ./test ' 这样才能执行,而不能 'test' 这样执行,就是通过PATH路径去找到这些命令)
HOME:指定用户的主工作⽬录(即用户登陆到Linux系统中时,默认的目录)
SHELL:当前Shell,它的值通常是/bin/bash。
3 查看环境变量方法
上述env命令,是查看所有环境变量的,这里提供一个通过环境名称,查找环境变量:
echo $NAME //NAME:你的环境变量名称
例如:
4 和环境变量相关的命令
echo | 显示某个环境变量值 |
export | 设置一个新的环境变量 |
evn | 显示所有的环境变量 |
unset | 清除环境变量 |
set | 显示本地定义的shell变量和环境变量 |
export建立一个环境变量,再通过unset清除:
通过set建立的变量,不会加入环境变量,通过evn是查不出来的:
5 环境变量的组织方式
每个程序都会收到⼀张环境表,环境表是⼀个字符指针数组,每个指针指向⼀个以’\0’结尾的环境 字符串。
6 通过代码如何获取环境变量
6.1 命令行参数
这里首先抛出一个问题:在写C/C++语言代码时,int main()主函数大多都是这样写的,但是也有这种形式:
int main( char argc,char *argv[ ] )
例如:
#include <stdio.h>int main(int argc, char *argv[]){int i = 0;for(; argv[i]; i++){printf("%s\n", argv[i]);}return 0;}
结果:
可以看到这里的argc是表示命令行参数的个数,而argv则表示命令行参数对应的字符串。这也就是之前的‘ ls -a ’ ‘mv -r’ ‘ cp -r ’等命令就是通过这样的方式将命令传入到主函数执行的。
6.2 环境变量
#include <stdio.h>int main(int argc, char *argv[], char *env[]){int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;}
其实main函数还有第三个参数,就是env(环境变量)一个指针数组,可以通过上述方式获取,这也就是当我们执行一个子进程时,父进程会生成这个env,子进程也就可以找到这个环境变量。
还有一种获取环境变量的方法:
#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;}
libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。
7 通过系统调用获取或设置环境变量
例如:
#include <stdio.h>#include <stdlib.h>int main(){printf("%s\n", getenv("PATH"));return 0;}
通过getenv系统调用,传入环境变量的名称(如:PATH)就可以返回对应的环境变量。
(补充:环境变量是可以被子进程继承下去的,环境变量是通过/.bash_profile&&~/.bashrc这两个shell脚本文件在打开操作系统时就会自动生成环境变量)。