Linux-环境变量

1. 基本概念

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

如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

(在linux中,程序运行的时候会通过LD_LIBRARY_PATH这个环境变量寻找除了默认路径之外的其他路径的动态链接库,默认路径就是类似于/usr/lib和/lib这种的在系统库中的动态链接库文件。)

环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

2. 常见环境变量

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

3. 查看环境变量

echo $NAME

NAME是环境变量的名字,$要加在名字前,表示这是一个变量,要不然就会把这个名字当成字符串打印在屏幕上

4. 环境变量相关命令

  1. echo: 显示某个环境变量值
  2. export: 设置一个新的环境变量
  3. env: 显示所有环境变量
  4. unset: 清除环境变量
  5. set: 显示本地定义的shell变量和环境变量

例如:给PATH环境变量添加新的路径

export PATH=$PATH:新路径

5. 环境变量的组织方式

environ是一个二级指针指向env[]指针数组

每个程序都会收到一张环境表(env[]),环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>

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

libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。 

extern char** environ;

通过系统调用获取或设置环境变量

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("%s\n", getenv("PATH"));
    return 0;
}

6. 环境变量通常是具有全局属性的

环境变量通常具有全局属性,可以被子进程继承下去

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>

int main()
{
    char *env = getenv("MYENV");
    if(env)
    {
        printf("%s\n",env);
    }
    return 0;
}

在环境变量没有MYENV的情况下,程序运行后无反应

export MYENV=hellokele

普通变量没有全局属性

相关推荐

  1. linux设置环境变量

    2024-04-05 14:38:04       58 阅读
  2. Linux环境变量

    2024-04-05 14:38:04       61 阅读
  3. Linux 环境变量

    2024-04-05 14:38:04       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 14:38:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 14:38:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 14:38:04       87 阅读
  4. Python语言-面向对象

    2024-04-05 14:38:04       96 阅读

热门阅读

  1. 每日一题 --- 前 K 个高频元素[力扣][Go]

    2024-04-05 14:38:04       36 阅读
  2. 蓝桥杯算法基础(37)BFS与DFS

    2024-04-05 14:38:04       27 阅读
  3. android studio中添加module依赖

    2024-04-05 14:38:04       35 阅读
  4. 其他元素

    2024-04-05 14:38:04       33 阅读
  5. [C++] 拷贝构造函数 && 深拷贝、浅拷贝

    2024-04-05 14:38:04       40 阅读
  6. 深入解析二叉树:理论与实践的完美结合

    2024-04-05 14:38:04       36 阅读
  7. 实验3-10 计算油费

    2024-04-05 14:38:04       37 阅读
  8. 什么是深度学习

    2024-04-05 14:38:04       35 阅读
  9. 实验6-1 近似求PI

    2024-04-05 14:38:04       34 阅读
  10. 【Python第三方库】lxml 解析器和xpath路径语言

    2024-04-05 14:38:04       41 阅读
  11. 多线程(31)StampedLock和ReadWriteLock

    2024-04-05 14:38:04       38 阅读
  12. MySQL【查询】

    2024-04-05 14:38:04       37 阅读