shell变量存储在哪里?

shell变量存储在哪里?

例如,如果我做了一个参数扩展:

$ b=1
$ echo $b
1

内部存储在哪里b?我检查了一下,它不是一个环境变量,因为它没有被列出printenv。我正在编写自己的 shell 来学习 Unix,我使用哈希表作为“符号查找表”来存储和检索变量 - 这种方法是一个好方法还是您会建议我其他方法?

答案1

当您登录以读取命令并运行它们时运行的 shell 会保留所有变量。如果您运行第二个 shell,那么它将有自己的变量集合。您可以运行该set命令来查看变量列表。该set命令在 shell 内部运行,而不是启动新进程。

环境变量要么保存在单独的空间中,要么进行标记(如果重要,请阅读 shell 源代码),以便它们沿着 shell 运行的程序传递。

使用两个哈希表对我来说似乎是合理的。

答案2

它只是程序执行期间的一个变量。思考这个问题的另一种方法是将您的程序重写为以下内容。

#!/bin/bash
b=1
echo $b
exit

现在,假设您正在终端中执行此操作,然后退出该终端会话。打开另一个终端会话不会显示任何事物关于b=1上届会议的这项任务。

这称为“局部变量”,而不是“全局变量”。它们与许多其他功能一起使用 来显示set

因此,如果您想查看作业,请执行以下操作

set |grep '^b='

b=1

请参见Linux 文档项目了解更多信息。

答案3

Shell 变量存储在正在运行的 shell 的内存中。使用任何可以让您根据名称轻松查找项目的数据结构;哈希表是一个不错的选择。

shell变量和环境变量的区别在于环境变量放在子进程的环境中。所有环境变量都是 shell 变量。存储它们的自然方法是创建一个哈希表,该哈希表不将变量名称映射到值,而是映射到包含值和一些标志(导出、只读等)的结构。

相关内容