Shell、C/C++、Python操作环境变量

news2024/11/26 16:59:54

环境变量

环境变量是一种在操作系统中用于存储信息的机制,这些信息可以被系统进程、应用程序和脚本访问和使用。环境变量在操作系统中的作用类似于一个全局配置参数,它们定义了操作系统的运行环境,包括系统行为、应用程序路径、用户信息等。环境变量是以键值对(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}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2035445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp自定义浮动图标、列表布局

uniapp自定义浮动图标 <button class="fab" @click="goPage"><image src="../../../static/yiyuan.png" mode="" style="width: 60rpx;height:60rpx;"></image></button>.fab {z-index: 100;positi…

TLE4966-3G带方向检测功能的高灵敏度汽车霍尔开关

TLE4966-3G是一款集成电路双霍尔效应传感器&#xff0c;专为使用旋转极轮的高精度应用而设计。通过片上有源补偿电路和斩波器技术实现精确的磁切换点和高温稳定性。 该传感器在Q2提供速度输出&#xff0c;其状态&#xff08;高或低&#xff09;与磁场值相对应。对于超过阈值BO…

小白零基础学数学建模系列-Day3-线性回归模型的构建与评估

文章目录 1 线性回归基础1.1 线性回归概念与应用1.2 数学原理与推导1.3 线性回归的实现 2 案例分析&#xff1a;房价预测2.1 加载数据2.2 数据预处理2.3 探索性数据分析2.4 观察选择特征2.5 准备训练模型的数据2.6 将数据拆分为训练集和测试集2.7 训练和测试模型2.8 模型评估 3…

Ubuntu每次登录都提示有新的更新,apt更新却0个软件需要升级:清空MOTD消息 安装update-notifier-common组件 运行强制更新脚本

问题 每登录ubuntu&#xff0c;都会显示有更新需要注意。 80更新可以立即应用。 这些更新中有 1 个是标准安全更新。 要查看这些附加更新&#xff0c;请运行&#xff1a;apt list --upgradable 然而使用更新命令却提示0可更新 查询了一下&#xff0c;这似乎是MOTD的错误&#x…

Gartner发布2024年网络风险管理成熟度曲线:使网络安全战略与业务目标保持一致的概念、方法、流程和技术

网络风险管理现在是高管和监管机构最关注的问题&#xff0c;它采用多种方法和技术来支持治理、风险管理和合规性。安全和风险管理领导者可以使用此技术成熟度曲线来评估解决方案并做出适当的采用决策。 战略规划假设 到 2026 年&#xff0c;60% 的网络安全职能将实施以业务影响…

【Qt】Qt编程注意事项

目录 Qr中的命名规范 Qt Creator中的快捷键 查询文档的方式 Qt窗口坐标体系 Qr中的命名规范 在学习编程语言阶段&#xff0c;给变量、函数、文件、类命名是非常有讲究的。 命名要有描述性&#xff0c;不要使用abc&#xff0c;xyz这种比较无规律的名字类描述。如果名字比较…

什么是前端微服务,有何优势

随着互联网技术的发展&#xff0c;传统的单体应用架构已经无法满足复杂业务场景的需求。微服务架构的兴起为后端应用的开发和部署提供了灵活性和可扩展性。与此同时&#xff0c;前端开发也经历了类似的演变&#xff0c;前端微服务作为一种新兴的架构模式应运而生。 一、前端微服…

开源web版3D展示工具Online3DViewer

Online3DViewer是一个免费且开源的Web解决方案&#xff0c;它允许用户在浏览器中直接预览和探索3D模型。 以下是关于Online3DViewer的详细介绍&#xff1a; 一、基本概述 定义&#xff1a;Online3DViewer是一个在线3D模型查看器&#xff0c;支持多种3D文件格式&#xff0c;用…

如何评价2023年数学建模国赛?

2023年的赛题已经发布了,ABC三题侧重点不同,但是A题专业性较强,涉及微分方程,以及优化模型,B题题目为多波束测线问题,第一问需要计算,结合函数和几何的相关知识点,问题2涉及到最小路径问题,如下有总结,可以查看相应的模块方法,C题目为“蔬菜类商品的自动定价与补货决…

C++ 哈希使用与底层原理

哈希的概念 哈希是一种建立映射的思想&#xff0c;我们尝试用的数据结构是哈希表 &#xff0c;又称「散列表」&#xff0c;其通过建立键 key 与值 value 之间的映射&#xff0c;实现高效的元素查询。具 体而言&#xff0c;我们向哈希表输入一个键 key &#xff0c;则可以在 &am…

Docker③_VMware虚拟机和Docker的备份与恢复

目录 1. VMware虚拟机的快照备份 1.1 VMware本机的快照备份 1.2 VMware快照备份到另一电脑 2. Docker知识点 2.1 Docker镜像和容器的关系 2.2 Docker的存储卷 2.3 Docker命令简介 2.4 删除Anylink镜像 3. Docker备份和恢复 3.1 确定要回滚的容器和版本 3.2 备份当前…

【C语言-扫雷游戏】mineweeper【未完成】

编程小白如何成为大神&#xff1f;大学新生的最佳入门攻略 编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&…

psychopy stroop 实验设计

斯特鲁stroop实验就是色词一致/不一致实验。 设计步骤如下&#xff1a; 1. 先去设置中将Input改为PsychToolbox&#xff0c; 2. 然后左上角File-New新建一个 3. 右键trial&#xff0c;rename改名 改成自己想要的名字即可&#xff0c;比如欢迎界面welcome。 4. 接下来添加提示语…

老阳推荐的temu选品师项目能不能做成?

在不断变化的电商领域&#xff0c;temU选品师项目作为一种新兴职业&#xff0c;受到了越来越多的关注。老阳的推荐使得这一项目引起了不少人的兴趣&#xff0c;那么&#xff0c;temU选品师项目究竟能否成功呢?让我们从一个新的角度来探讨这一问题。 新兴市场的机遇与挑战 temU…

C语言 ——— 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串

目录 题目要求 代码思路 代码实现 题目要求 写一个函数&#xff0c;判断一个字符串是否为另外一个字符串旋转之后的字符串 例如 s1 "AABCD" &#xff1b;s2 "BCDAA" &#xff0c;返回1 s1 "AABcd" &#xff1b;s2 "BCDAA" …

免费分享一套SpringBoot+Vue仓库(进销存)管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue仓库(进销存)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue仓库(进销存)管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 该系统的设计初衷是解决传统仓库管理中存…

高可用集群KEEPALIVED

文章目录 高可用集群KEEPALIVEDVRRPkeepalived 部署环境准备 开启通信功能设置独立日志设置独立子配置文件抢占模式和非抢占模式延迟抢占非抢占模式 单播模式邮箱邮件通知脚本 双主架构实现ipvs的高可用性lvs-dr VRRP Script实现HAProxy高可用 文章相关连接如下&#xff1a; 如…

力扣 | 动态规划 | 在字符串的应用 | 最长回文子串、最长回文子序列、单词拆分、编辑距离

文章目录 1.最长回文子串2.最长回文子序列3.单词拆分4.编辑距离5. 共同点和思路6. 各个问题的思路和扩展1. 最长回文子串2. 最长回文子序列3. 单词拆分4. 编辑距离 在解答字符串动态规划的应用时&#xff0c;我们需要非常注意一个问题&#xff1a;   有时候我们定义 d p [ i …

MoonBit 周报 Vol.53:新增高级循环语法、引入字符串插值、MoonBit AI 支持代码解释!

weekly 2024-08-05 MoonBit更新 添加了基于 Iter 和 Iter2 类型的 for .. in 循环支持&#xff1a; fn main {for x in [ 1, 2, 3 ] {println(x)}for k, v in { "x": 1, "y": 2 } {println("\{k} > \{v}")} }for 与 in 之间可以使用 1&…

事务及事务的控制.特性

一.事务 1.事务定义 ​ 逻辑上多个DML操作形成的一个整体,多个DML操作要么全都执行成功,要么全都执行失败,如果是DDL的操作会自动提交事务. 2.事务的控制 命令 start transaction开启事务rollback 回滚commit提交事务 mysql默认自动提交事务,每个DML执行完毕后,直接提交事…