Linux环境变量与本地变量

文章目录

Linux环境变量与本地变量

什么是环境变量

操作系统或运行时环境中存储的一些变量,用来存储与进程或系统相关的配置信息。这些变量在进程启动时由操作系统或Shell读取,并对进程的行为和资源访问产生影响。

查看环境变量

bash 复制代码
env  //可以查看所有的环境变量,环境变量具有全局属性,也就是你这个程序中的所有子进程的环境变量都是继承父进程的
bash 复制代码
echo $具体变量名称    //查看具体的某个环境变量
c 复制代码
系统调用接口
char* getenv(const char* name);

设置环境变量

bash 复制代码
export MY_Value = 1111 //设置MY_value为环境变量,并且值为111
unset MY_value  //取消环境变量

本地变量

直接在shell中定义的变量就是本地变量

例如:直接在bash中写入以下的内容,A 和 B就是本地变量。

bash 复制代码
A = 1
B = 2c

**问题1:**可知bash是一个进程,我们在bash中所输入的指令都通过bash去创建子进程去执行,当我们用echo去输出本地变量的值的时候,为什么可以输出出来,按理来说本地变量不是不能继承给子进程吗?

答1 :命令行上创建的进程不都是通过创建子进程去运行的。这里分为两种,一部分命令是去创建子进程中创建,另一部分的指令是通过bash自己去完成,类似于bash调用了自己的,或者系统写的函数,也被叫做内建命令。如cdechopwd

注意:不管是环境变量还是本地变量,都只是在当前bash中生效,一旦bash销毁,这些变量也会销毁。

问题2: 为什么说环境变量有全局属性,子进程是如何继承的?

答2: 这里涉及到命令行参数传参,main函数的第三个参数int main(char argc,char* argv\[\],char* env\[\])

env里面是我们所有的环境变量。

命令行参数

c 复制代码
int main(char argc,char* argv[],char* )
{
	return 0;
}

argv是一个指针数组,里面的元素保存的是命令的输入内容,以空格为分隔。argc是argv中的元素个数。

c 复制代码
int main(char argc,char* argv[])
{
    int i = 0;
    for(;argv[i],i++)
    {
        printf("%s\n,"argv[i]);
    }
	return 0;
}

假设这个程序名字为mytest

我们在命令行输入 ./mytest a b c d

这个程序将会打印如下的内容:

c 复制代码
./mytest
a
c
d

这也就是我们所输入的内容,这就是命令行参数,注意argv\[\]数组最有一个指针指向的位置为NULL,也就是0

相关推荐
code monkey.19 分钟前
【Linux之旅】Linux 应用层自定义协议与序列化:从粘包问题到网络计算器
linux·网络·c++
草莓熊Lotso22 分钟前
【Linux网络】深入理解 HTTP 协议(二):从协议格式到手写工业级 HTTP 服务器
linux·运维·服务器·网络·c++·http
剑神一笑7 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux·运维·chrome
剑神一笑7 小时前
Linux killall 命令详解:按进程名批量终止进程的原理与实践
linux·运维·chrome
日取其半万世不竭11 小时前
iftop、nethogs 和 nload:Linux 服务器网络流量实时监控工具介绍
linux·运维·服务器
mounter62511 小时前
Linux 内核资源管理:控制组(cgroup)的演进与“策略组”新提案
linux·运维·服务器·cgroup·kernel
bksczm11 小时前
文件在磁盘中的存储方式
linux·运维·服务器
L16247611 小时前
OpenSSH 半自动升级方案(独立编译 + 手动迁移 + 重建 systemd 服务)
linux·服务器·ssh
半旧夜夏12 小时前
【保姆级】微服务组件环境搭建(Docker Compose版)
java·linux·spring cloud·微服务·云原生·容器
爱莉希雅&&&13 小时前
zabbix快速搭建和使用
android·linux·数据库·zabbix·监控