环境变量
环境变量是一种在操作系统中用于存储信息的机制,这些信息可以被系统进程、应用程序和脚本访问和使用。环境变量在操作系统中的作用类似于一个全局配置参数,它们定义了操作系统的运行环境,包括系统行为、应用程序路径、用户信息等。环境变量是以键值对(key-value pair)形式存在的,每个环境变量都有一个名称(键)和一个与之对应的值。环境变量的名称通常是全大写字母,遵循命名规则,可以包含字母、数字、下划线 _,但不能包含空格。
环境变量根据其作用范围和作用对象可以大致分为以下几种类型:
-
系统环境变量:这些环境变量由操作系统设置,通常影响整个系统的行为。例如,PATH 环境变量定义了可执行文件的搜索路径。
-
用户环境变量:这些环境变量特定于用户,并且只有在该用户登录时生效。例如,HOME 环境变量定义了用户的主目录。
-
会话环境变量:这些环境变量在特定的终端会话或脚本中设置,通常仅在该会话或脚本期间有效。一旦会话结束或脚本执行完毕,环境变量将不再可用。
环境变量的作用非常广泛,几乎所有操作系统的任务和程序都依赖于环境变量来获取运行所需的信息。以下是一些常见的应用场景:
-
路径管理:PATH 环境变量包含多个目录路径,当用户在命令行输入命令时,系统会按照PATH中的路径依次查找可执行文件。
-
语言与区域设置:LANG 和 LC_* 系列环境变量控制系统的语言和区域设置。例如,它们决定了日期、时间、货币等格式的显示方式。
-
用户信息:HOME 环境变量指示用户的主目录,而 USER 环境变量保存当前登录用户的用户名。
-
配置文件路径:某些应用程序使用环境变量来确定配置文件或数据文件的位置。例如,JAVA_HOME 指定了 Java 开发工具包(JDK)的安装目录。
Shell命令
1.查看环境变量
env
printenv
2.查看特定环境变量
echo $VARIABLE_NAME
3.设置环境变量
export VARIABLE_NAME=value
4.删除环境变量
unset VARIABLE_NAME
5.永久设置环境变量
vim ~/.bashrc
source ~/.bashrc
C/C++
1.查看所有环境变量
#include <iostream>
using std::cout;
using std::endl;
int main() {
extern char **environ;
for(int i = 0; environ[i]; i++) {
cout << environ[i] << endl;
}
return 0;
}
在Unix和Linux系统中,environ 是一个全局变量,包含了当前进程的环境变量。environ 是一个指向字符串指针的指针,具体来说,它是一个指向 char* 的指针数组,每个元素都指向一个环境变量字符串(格式为 NAME=VALUE)。extern 关键字表示这个变量是在别处定义的(通常是在标准库中),而在这里只是声明一下,以便在当前文件中使用。
2.查看特定环境变量
#include <cstdlib>
#include <iostream>
int main() {
const char* path = std::getenv("PATH");
if (path) {
std::cout << "PATH: " << path << std::endl;
} else {
std::cout << "PATH environment variable not found." << std::endl;
}
return 0;
}
3.修改环境变量
#include <cstdlib>
#include <iostream>
int main() {
// 设置新的环境变量
setenv("MY_VAR", "Hello World", 1); // 1 表示覆盖已有的变量
// 获取并打印变量的值
const char* myVar = std::getenv("MY_VAR");
if (myVar) {
std::cout << "MY_VAR: " << myVar << std::endl;
}
return 0;
}
setenv 函数的第三个参数 overwrite 设置为 1 表示允许覆盖已有的变量。如果 overwrite 为非零值(例如 1),如果 overwrite 为零,并且环境变量已经存在,则函数不会改变环境变量的值。
#include <cstdlib>
#include <iostream>
int main() {
// 设置环境变量 MY_VAR 的值为 "New Value"
if (setenv("MY_VAR", "New Value", 1) == 0) {
std::cout << "Environment variable MY_VAR set to: " << std::getenv("MY_VAR") << std::endl;
} else {
std::cerr << "Failed to set environment variable." << std::endl;
}
// 尝试不覆盖已存在的环境变量
if (setenv("MY_VAR", "Another Value", 0) == 0) {
std::cout << "Attempted to set MY_VAR to Another Value, result: " << std::getenv("MY_VAR") << std::endl;
} else {
std::cerr << "Failed to set environment variable." << std::endl;
}
return 0;
}
4.删除环境变量
#include <cstdlib>
#include <iostream>
int main() {
// 设置环境变量
setenv("MY_VAR", "Hello World", 1);
// 删除环境变量
unsetenv("MY_VAR");
// 尝试获取被删除的变量
const char* myVar = std::getenv("MY_VAR");
if (myVar) {
std::cout << "MY_VAR: " << myVar << std::endl;
} else {
std::cout << "MY_VAR environment variable not found." << std::endl;
}
return 0;
}
Python
1.获取环境变量
import os
# 获取环境变量的值
path = os.getenv('PATH')
if path:
print(f'PATH: {path}')
else:
print('PATH environment variable not found.')
2.设置或修改环境变量
import os
# 设置或修改环境变量
os.environ['MY_VAR'] = 'Hello World'
# 获取并打印环境变量的值
my_var = os.getenv('MY_VAR')
print(f'MY_VAR: {my_var}')
3.删除环境变量
import os
# 设置环境变量
os.environ['MY_VAR'] = 'Hello World'
# 删除环境变量
os.environ.pop('MY_VAR', None)
# 检查环境变量是否存在
my_var = os.getenv('MY_VAR')
if my_var is None:
print('MY_VAR environment variable not found.')
else:
print(f'MY_VAR: {my_var}')