目录
环境变量基本概念
环境变量是OS给我们提供的参数或者数据。
一些有关环境变量相关的操作:
①echo:显示某个环境变量的值
②set:显示本地定义的shell变量和环境变量
③env:显示所有的环境变量
④export:设置一个新的环境变量
⑤unset:清除环境变量
先用env命令查看一下有什么环境变量
常见的环境变量主要有三个
PATH:系统中命令的搜索路径
HOME 当前登录用户家目录
SHELL:bash所在的目录
对于PATH的理解
先观察一个现象:
执行一条程序的方法:既可以直接写出也可以带上路径+程序。那么为什么执行我自己的程序必须要带上路径呢?
执行系统命令可以不带路径,因为操作系统有一套规则,知道在哪里去寻找。系统的命令默认是可以被找到的。这些命令在环境变量中保存着。但是执行自定义程序的话,不带路径就无法运行了。
也就是说系统命令可以直接被运行,是因为在PATH路径中已经保存了对应的命令的搜索路径,我直接执行ls命令,系统默认就会去这些地方寻找,找到了就可以执行了。
$PATH我们来查看一下都有哪些路径。中间用;分割的就是不同的路径。
如何自己设置环境变量
如果我想运行我自己的程序和运行系统中的程序一样,不带路径,我该怎么做呢?
1 由于我的程序不在系统默认的搜索路径中,我可以把我的程序放到对应的搜索路径中,但是这样相当于安装自己的程序到系统中,会污染OS的命令池。
2 重新设置PATH,将我的程序的路径放到PATH中,这样我每次执行自己的程序就不用带上路径了。他只在本次登陆中修改,下次登录PATH会复原的。
main函数的参数
int main(int argc, char *argv[], char*env[])
其实main函数总共会传入三个参数。前两个叫做命令行参数,最后一个叫做环境变量参数。该参数可以将启动该进程的父进程传递给他的环境变量信息,传到这里。
环境变量参数
也就是说环境变量一般是由父进程导入的,最开始是bash提供的。bash的环境变量又是由操作系统提供的。也就是说操作系统提供的环境变量具有全局性,因为他可以被所有子进程继承,那么所有子进程都能拿到对应的环境变量。环境变量是系统的变量,可以帮我们做一些事情:可以帮我们找命令等。
环境变量是一个指针数组类型,数组中的每一个元素保存的就是环境变量对应的字符串。
环境变量被当成字符串,以指针数组的形式被保存和维护起来,以参数的形式传递给main。于是main在运行的时候就可以获取对应的环境变量了。
命令行中可以设置的两种变量:
局部变量 这是命令行独有的。直接设置就可以了。不过重启bash就没了。只在当前有效。
全局变量或者环境变量,所有共享的。可以通过export的命令来设置。
如何获取环境变量
1
2 函数调用获取
3
第三方变量获取
name 所指向的环境字符串,并返回相关的值给字符串。该函数返回一个以 null 结尾的字符串,该字符串为被请求环境变量的值。如果该环境变量不存在,则返回 NULL。
关于命令行参数
Argc 在命令行参数中传了几个参数
Argv指针数组 char*类型的指针数组。和env类似的
命令行参数:在启动程序时传入的选项。
命令行参数的意义:同样的一个程序 ,通过选项的方式来选择使用同一个子程序的不同功能。选项底层是通过命令行参数获得的。比如我们日常带的ls -a这样的选项。这表示argv[1]的第一个位置是什么选项,如果有多个选项就依次再其后位置搜索。
命令行参数也是由bash传递给子进程的。和上述类似。