我正在寻找env
显示所有环境变量的方法。我碰巧发出了该命令set
,它似乎将脚本“cat”到控制台。为什么会发生这种情况?
这参考页似乎没有解释这一点。
If no options or arguments are supplied, set displays the names
and values of all shell variables
答案1
set
是 shell 内置命令。当您在命令行中发出该命令时,您将看到当前环境中的所有内容。这将包括您已加载的任何函数。请注意,大多数发行版将在 shell 配置文件中包含至少几个有用的函数,如果您安装了 bash 补全,您将拥有大量这样的函数。
env
是二进制文件。它由 shell 加载和执行,就像任何其他命令一样。因此,它只能看到您导出的任何环境变量,这应该会排除 shell 环境中的任何函数。
答案2
正如 Frank Schrijver 在他的评论中解释的那样,bash 内置命令set
将转储所有 shell 变量(仅在该运行时“存在”的变量)和所有shell 函数,再次初始化函数并存在于该特定 shell 进程中。
例如,您将看到类似
_tilde ()
{
...
}
它是一个函数,其目的是~
为你的 bash 行编辑器提供字符的制表符补全。事实上,甚至可以通过运行命令查看
的 bash 文档set
man bash | less '+/^\s*set \[--'
没有提到它默认打印所有 shell 函数的事实,但是正如您所发现的,并且其他人也指出的那样 - 它也打印 shell 函数。