Linux 环境变量

文章目录

  • 环境变量概念
  • 查看环境变量
  • 设置环境变量
  • 代码获取环境变量
  • 补充说明

环境变量概念

定义 :环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。

个人理解:Linux下一切皆文件,在Linux中所用的指令其实都是一个个可执行文件,例如ls
指令,他的路径为 /bin/ls , 用户直接输入ls即可运行该文件, 那么为什么用户自己用代码编写生产的可执行文件,要用路径/文件名的格式才能执行,而像 ls 这样的指令不需要呢? 因为系统的环境变量,为 ls提供了运行环境的参数,或者说帮助该指令查到了其可执行文件所在的位置 。

常见的环境变量有:
PATH : 指定命令的搜索路径
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
SHELL : 当前Shell,它的值通常是/bin/bash。

在这里插入图片描述

! : 环境变是一个 KET=VALUE 形式的键值对 ;

查看环境变量

指令:

  1. echo: 显示某个环境变量值($代表后面的字符串是个变量名)
echo $KEY 
  1. env: 显示所有环境变量
  2. set: 显示本地定义的shell变量和环境变量

设置环境变量

  1. export: 设置一个新的环境变量
export KET=VALUE 
  1. unset: 清除环境变量
  2. putenv (在C代码中执行的函数)
`int putenv(char *string);`
#include 
#include 

int main() {
    if (putenv("MYVAR=Hello") == 0) // 环境变是一个 `KET=VALUE` 形式的键值对
    {
        printf("Environment variable set successfully\n");
    } else 
    {
        printf("Failed to set environment variable\n");
    }
    return 0;
}
  1. 通过配置文件设置永久生效的环境变量

前面的环境变量设置方法,在重启xshell以后会失效,将环境变量添加到~/.bashrc~/.bash_profile文件中,这样每次登录时都会加载这些环境变量。因为除非自己手动删除否则永久生效,所以要谨慎配置。

进入配置文件

vi ~/.bashrc

在文件末尾添加:

export 变量名=变量值

例如:

export MY_VAR=hello

保存并退出文件,然后执行以下命令使其生效:

source ~/.bashrc

这样,每次登录时都会自动加载这些环境变量。

代码获取环境变量

  1. 通过main函数参数获取
#include 

int main(int argc, char *argv[], char *env[]) // env即环境表,环境表在补充说明部分有;
{
 int i = 0;
 for(; env[i]; i++){
 printf("%s\n", env[i]);
 }
 return 0;
}`
  1. 通过getenv函数获取
int putenv(char *string);

示例:

#include 
#include 

int main() {
    char *path = getenv("PATH");// PATH 为输入的KEY,返回值为VALUE
    if (path != NULL) {
        printf("PATH: %s\n", path);
    } else {
        printf("PATH not found\n");
    }
    return 0;
}
  1. 通过第三方变量environ获取

在Linux中,environ是一个指向环境变量的指针数组。它是一个全局变量,存储了当前进程的环境变量信息(环境表,见补充说明部分)。环境变量是一些在操作系统中设置的键值对,用于存储各种配置信息和运行时参数。例如,PATH环境变量用于指定可执行程序的搜索路径。environ指针数组中的每个元素都指向一个以 key=value 格式表示的环境变量字符串。数组的最后一个元素是一个空指针,用于表示数组的结束。通过遍历environ数组,可以获取当前进程的所有环境变量及其对应的值。

#include 

int main(int argc, char *argv[])
{
 extern char **environ;
 int i = 0;
 for(; environ[i]; i++){
 printf("%s\n", environ[i]);
 }
 return 0;
}`

i

补充说明

  1. 每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。

Linux 环境变量_第1张图片

  1. 在终端执行export MYENV="hello world“ 和 直接执行 MYENV="hello world“ 的区别

export命令用于将普通变量设置为环境变量,环境变量具有全局属性,可以在当前会话中的所有子进程中访问到。而直接执行变量赋值语句设置普通变量,如MYENV=“hello world”,则只在当前shell进程中有效,不会被子进程继承。

  1. 由于环境变量的全局属性,父进程的环境变量可以被子进程继承 。

你可能感兴趣的:(linux,个人学习,c语言)