创建自定义变量

ShellBeginner
立即练习

简介

在之前的实验中,我们了解了 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,验证变量是否能够传递过去。

  1. 启动新的 bash 会话:
bash

现在你已进入一个新的 Shell 进程。

  1. 检查它是否能读取 MYCAFE:
echo $MYCAFE

输出:

espresso

这说明变量已生效!子 Shell 继承了该变量值。

这里的关键词是「继承」。子进程通常会从父进程的环境中获得一份副本,因此,导出变量是向脚本和命令传递上下文信息的常用方法。

  1. 退出子 Shell,返回父 Shell:
exit

总结

在本实验中,你练习了变量的完整生命周期:

  • 创建:MYCAFE="espresso"(不要加空格!)
  • 读取:echo $MYCAFE(不要忘记 $)
  • 共享:export MYCAFE(使子进程能够使用该变量)

系统正是通过这种机制,在你登录之前设置好运行环境,例如 PATH、USER 等变量!