简介
在之前的实验中,我们了解了 User 等已有变量。现在,创建属于你自己的「便利贴」。
变量就是一个用于保存文本的名称。
但是,创建变量后,它默认只对当前 Shell 可见。要让其他程序使用它,必须将其「导出」。
Shell 变量与环境变量之间的区别,是本模块的核心概念之一。并不是所有变量都会自动成为子进程可见的环境变量。
在本实验中,你将:
- 创建变量
MYCAFE。 - 读取变量内容。
- 「导出」变量。
- 在第二个 Shell 中验证变量是否生效。
创建变量
创建一个名为 MYCAFE 的变量,并将其设置为 "espresso"。
创建变量就像在便利贴上写下一段内容。
执行以下命令:
MYCAFE="espresso"
重要提示:= 两侧不要加空格。
- 正确:
MYCAFE="espresso" - 错误:
MYCAFE = "espresso"
如果使用空格,Shell 会把 MYCAFE 视为一个命令。
这个例子很好地说明了 Shell 语法对空白字符非常敏感。在 Shell 中,空格不只是视觉上的格式;它通常用于分隔具有实际含义的单词和参数。
输出变量
现在,验证变量值是否已保存。
要访问变量值,请使用美元符号 $。
执行以下命令:
echo $MYCAFE
输出:
espresso
如果省略 $,echo 只会输出单词「MYCAFE」。
导出变量
目前,MYCAFE 是一个局部变量,就像写在私人笔记本中的内容。
要让其他程序使用它,必须将其导出。导出后,它会变成一个环境变量,就像把内容发布到公告栏上一样。
可以把 export 理解为告诉 Shell:「启动子程序时,也包含这个变量。」如果不执行导出操作,该变量值只会保留在当前 Shell 中。
执行以下命令:
export MYCAFE
现在,从当前 Shell 启动的任何程序都可以获得 MYCAFE。
在子 Shell 中测试
启动一个「子」Shell,验证变量是否能够传递过去。
- 启动新的
bash会话:
bash
现在你已进入一个新的 Shell 进程。
- 检查它是否能读取
MYCAFE:
echo $MYCAFE
输出:
espresso
这说明变量已生效!子 Shell 继承了该变量值。
这里的关键词是「继承」。子进程通常会从父进程的环境中获得一份副本,因此,导出变量是向脚本和命令传递上下文信息的常用方法。
- 退出子 Shell,返回父 Shell:
exit
总结
在本实验中,你练习了变量的完整生命周期:
- 创建:
MYCAFE="espresso"(不要加空格!) - 读取:
echo $MYCAFE(不要忘记$) - 共享:
export MYCAFE(使子进程能够使用该变量)
系统正是通过这种机制,在你登录之前设置好运行环境,例如 PATH、USER 等变量!



