环境变量概念
环境变量=系统的"全局小纸条",上面写着各种配置、路径、参数,所有程序能看、能用。
它到底是什么? 可以理解为:
系统开机时就已经写好的一堆键值对;格式:名字=内容;整个系统、所有shell、你写的程序、都可以读到它
Linux去哪里找可执行文件?---->它只能去一个地方找,:PATH环境变量里面写的那些目录。
别的地方一律不找。
输入echo $PATH, 告诉我们当我们输入命令时,Linux只会在以下的文件中找命令,别的地方一律不去。

这里的冒号是 目录和目录之间的分隔符。
PATH就是找命令的 [搜索范围],输入的任何命令就是只能在PATH路径里寻找,不在PATH里面的程序,必须写路径(比如./)才能运行。
作用是:可以不用写完整路径,直接输入名字就能运行命令。
把自定义目录添加到系统的PATH环境变量中。


作用
引入环境变量,它是系统级的变量,变量名和变量内容,往往具有全局属性。
HOME:指定用户的主工作目录
SHELL:当前SHELL,他的值通常是/bin/bash
获取环境变量的方法
如何通过代码获取环境变量
第一种方法通过main函数的第三个参数char *env[ ]来访问环境变量。


第二种获取环境变量的方法。全局指针extern char **environ,environ是一个全局的字符串指针数组,他和main函数第三个参数env[ ],指向的是同一份环境变量数据。


第三种获取环境变量的方法是:getenv(name)


在代码里获取这些数据作用
在代码里获取环境变量,本质上就是让程序**"看菜吃饭、灵活适配"**:
不用把路径、用户名、开关等写死在代码里,程序会自动读取系统的"全局配置"。
运行前改一下环境变量,就能改变程序的行为,不用重新编译。
让程序在不同用户、不同机器上都能"自动适应",更智能也更省心。
一句话总结:环境变量就是程序的"运行时配置表",帮程序适配环境、灵活控制行为。
环境变量是父进程给的。孙子进程也可以看到环境变量。
bash进程的环境变量,又是从哪里来的? ------- >从Linux的系统配置文件来的,
程序、命令等都是bash进程的子进程。----->子进程代码和数据可以共享
内建命令:
我用最通俗、最简洁的话给你讲懂:
什么是内建命令?
内建命令 = 直接嵌在 Shell 内部的命令
不是外面单独的程序,运行时不创建新进程。
对比一看就懂
- 普通命令(如 ls 、 gcc 、 find )
是独立程序,运行时会创建新进程。
- 内建命令(如 cd 、 pwd 、 export 、 echo )
是Shell 自己的功能,运行不创建新进程。
为什么要有内建命令?(最关键)
拿 cd 举例:
-
如果 cd 是外部命令,它会开子进程
-
子进程改了目录,影响不到父进程(你的 Shell)
-
所以 cd 必须是内建命令,直接改当前 Shell 的环境
export 设置环境变量也一样:
必须是内建,才能直接修改当前进程的环境变量。
总结
内建命令 = Shell 自带的功能,不创建新进程,能直接修改当前 Shell 的环境(目录、环境变量等)。
判断内建命令
- 一句话判断
-
内建命令:不创建新进程,就是当前 Shell 自己执行。
-
外部命令:会创建新进程,是开一个子进程去跑。
- 最直观区分方法(你现在就能用)
方法A:看是不是 Shell 自带功能
这些一定是内建,不创建进程:
-
cd
-
pwd
-
export
-
echo
-
exit
-
history
凡是改当前 Shell 状态的(目录、环境变量),一定是内建。
方法B:用 type 命令查(最准)
bash
type cd
type ls
type export
-
输出 builtin → 内建,不创建进程
-
输出 /usr/bin/xxx → 外部命令,创建新进程
- 最核心记忆点(考试必背)
- 能影响当前 Shell 的 → 必须内建 → 不创建进程
如: cd 、 export
- 只是干活、不影响当前 Shell 的 → 外部命令 → 创建进程
如: ls 、 cat 、 gcc
超简洁总结
内建命令:自己干,不创建新进程。
外部命令:叫别人干,创建新进程。
内建命令的作用
- 修改当前 Shell 进程自身的状态
比如切换目录、设置环境变量、退出终端。
-
不创建新进程,执行更快
-
只有内建命令,才能真正影响当前 Shell
外部命令改不动当前进程的目录、环境变量。
一句话终极总结
内建命令,就是让 Shell 自己干活,直接修改当前进程,不创建子进程。
本地变量
本地变量是什么?
只在当前 Shell 进程里有效,
子进程看不见、用不了的变量。
和环境变量的区别(最关键)
-
本地变量:只在自己进程里有,不传给子进程
-
环境变量:会继承给子进程
怎么定义
bash
name=张三
这就是本地变量。
怎么变成环境变量
bash
export name
export 一下,就变成环境变量,子进程能拿到。
一句话总结
本地变量:自己用,不传给儿子。只在bash内部,属于当前shell自己的变量。
环境变量:大家用,能传给儿子。
三个环境之间的联系和区别
**- 本地变量:只在当前 Bash 里,子进程看不见。
- 环境变量:Bash 和子进程都能用。
- 内建命令:专门操作这两种变量,不创建新进程。
一句话:
内建命令管变量,本地自用,环境公用。**