先问问自己:为什么系统的命令不用带路径呢?
环境变量
1.查看环境变量
直接echo PATH不可以,要加$符号
系统查找的时候,以冒号为分隔符号,找不到第一个就去找第二个,找不到第二个就去找第三个,以此类推,找到了就直接跑起来
导入环境变量
记住用这种方式在后面添加,如果把之前的都修改了,也不用担心,这只是在内存级别的修改,只需要重新登录服务器即可
配置过后,我们之前用./myproc当前路径的方式可以跑,直接myproc现在也可以跑了
还有一种环境变量HOME
为什么不同用户pwd的结果是不同的呢,原因就是环境变量HOME的值不同
SHELL环境变量
查看所有的环境变量用指令env
环境变量的本质是 OS在内存/磁盘文件中开辟的空间,用来保存系统相关的数据
2.环境变量的相关命令
系统上还存在一种变量,只在此次登录(session)有效,叫做本地变量
env显示所有环境变量
set命令,显示本地变量和环境变量
说明我们自己定义的变量是本地变量
导入环境变量过后,就变成全局变量了
unset是取消环境变量
3.环境变量的组织/获取方式
写这个对应关系有个什么用
指令有很多选项,用来完成同一个指令的不同子功能
写一个小程序myproc展示
看完这个,对ls -a -l -n 之类的指令是否有了更深的了解呢
指令有很多选项,用来完成同一个指令的不同子功能
这才是命令行参数的意义!
我们这里实现的和env的结果实际上是差不多的
小问题:函数如果没有参数,可以传参吗?
可以的!
这里的environ可以看作是一个二维数组
这里的environ是一个外部指针,是由系统提供的,系统会自动帮你去找好环境变量的位置,让你去访问
上面的其实都不是最常用的方式
最常用的方式使用getenv这个函数
4.环境变量具有全局属性
我们在运行一个程序的时候,可以发现,会不断产生新的进程,因此每一次的pid都是不同的,然而ppid都是相同的
我们可以发现,这个父进程就是bash
当前的理解,环境变量具有全局属性的本质:环境变量可以被子进程继承下去(这边这个本地变量就不能被继承)