环境变量概念以及获取环境变量(linux下解析)

发布于:2025-04-16 ⋅ 阅读:(32) ⋅ 点赞:(0)

目录

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脚本文件在打开操作系统时就会自动生成环境变量)。