一、什么是环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
二、常见环境变量
2.1 HOME变量
查看家目录
2.2 USER
作用 : 用于身份验证
2.3 PATH
作用 : 包含程序指定运行的路径,指定操作系统需要使用到的可执行程序的位置。这样也解答了刚刚接触Linux时所带来的疑惑。
思考 : 接触./a.out ls cd 等命令的时候,是否有这样的疑问,在使用ls指令查看该目录下的子目录和文件时候为什么输个ls 后面加选项就能查看了,而自己运行程序需要./a.out或者是在学C语言的时候,为什么输入#include<stdio.h> 就能够调用该库的函数,如printf scanf。其实这背后就是由环境变量搞定。操作系统按照路径顺序依次查找。
证明 : 用which 查看ls命令便不难看出来操作系统是通过PATH搜索路径来确定ls命令,从而简化操作,不需要用户在前面加上路径
三、相关指令
3.1 查看环境变量
1、查看单个环境变量 : echo $name
2、查看全部环境变量 : env
3.2 设置环境变量
1、修改已有环境变量
以将自己写的程序变成类似ls指令。
正常的方式:
1、export PATH=$PATH:路径 能够将其加入环境变量当中。
2、是将程序放到路径当中的其他文件路径中(不推荐)
3.3 添加环境变量
1、添加本地变量:
变量名=变量名(变量与等号之间不能有空格,不然会被bash判定为是命令 出现command not found的报错)
2、添加环境变量:export 环境变量名=要给的值
例如
三、在代码里获取环境变量
3.1 通过envp数组获取:
3.2 通过全局变量environ获取:
3.3 调用函数getenv():
四、本质
那么这时候环境变量究竟是什么呢。其实环境变量是char* envp[]。bash根据配置文件,在用户登录后,针对不同用户形成特定的环境变量表且由bash来进行维护的。是能够被子进程继承的.因此环境变量是有全局属性的 而本地变量也是在bash中,但是没有添加到envp数组,无法被子进程继承。因此也说明了export的功能是将变量添加到bash中的envp数组z中。
五、命令行参数
5.1 什么是命令行参数:是给main函数传递不同的参数使之执行不同的功能。为指针数组且argv[0]为可执行程序,其他为参数选项。
5.2 运用命令行参数