环境变量
环境变量是一组影响操作系统运行行为的参数,它们具有全局属性——也就是说,可以被子进程继承。bash 启动时会从系统配置文件中读取这些信息,每次启动都会重新加载,所以父进程的环境变量一旦变化,子进程也会跟着变。
常见的环境变量
PATH:命令搜索路径HOME:用户主工作目录SHELL:当前 shell,通常是/bin/bashHISTSIZE:history可保存的最大命令条数SSH_TTY:SSH 远程登录时的终端设备路径USER/LOGNAME:当前登录用户(两者没太大区别)PWD:当前目录(修改这个变量并不会改变实际位置)OLDPWD:cd切换目录时的上一个路径
与环境变量相关的指令
echo:显示某个环境变量的值export:设置一个新的环境变量env:显示所有环境变量(想看单个的搭配grep即可)unset:清除环境变量set:显示所有本地变量和环境变量- 直接修改变量:比如
PATH=$PATH:/home/renshen
引申:本地变量只在当前 bash 进程里有效,通过 export 变量名(不用加 =值)就可以把它转成环境变量。
使用系统调用获取或设置环境变量
相关的系统调用有 getenv 和 putenv。另外,chdir 这个系统调用可以改变当前工作目录。
main 函数的命令行参数
真正的 main 函数原型是:
int main(int argc, char *argv[], char *env[]);
argc:命令行参数的总个数,包括程序名本身。argv:命令行参数字符串数组,末尾放一个nullptr。env:环境变量数组。每个进程启动时,都会传入两张核心向量表——命令行参数表和环境变量表。如果不写char *env[],也可以在代码里用extern char **environ访问环境变量,用法和env一样,比如environ[0]。这个全局变量直接指向环境变量表,无需额外头文件。
这样设计的目的,是为命令、工具和软件提供命令行选项的底层支持。
常规命令与内建命令
- 常规命令:bash 会创建子进程来执行。
- 内建命令:bash 不创建子进程,直接由自身执行,类似于调用系统提供的函数。比如
echo就是内建命令。


