为什么在 printenv 上我看不到 HOSTNAME 环境变量?

为什么在 printenv 上我看不到 HOSTNAME 环境变量?

在我的 ubuntu 机器上,我运行以下命令:

printenv | grep HOSTNAME

当我在终端执行以下操作时不显示任何输出:

echo ${HOSTNAME}

显示输出。所以我想知道为什么 printenv 没有显示HOSTNAME环境变量?

答案1

因为它不是一个环境变量,它只是一个shell 变量– 也就是说,它还没有被export添加到环境中。(Bash 会自动生成此变量以供其 CLI 和 shellscript 使用,但除非您要求,否则它不会将其导出。)

(当您使用时echo $var,扩展是由 Bash 在解释命令时完成的,而不是由命令本身完成的 - 因此它可以完全访问仅存在于 Bash 内存中的变量。)

同样的情况也适用于自定义变量:如果您在不使用命令的情况下设置它们export,它们仅存在于 shell 中,但不会导出到其环境中。例如:

testone=111
export testtwo=222
echo $testone, $testtwo
printenv | grep test

相关内容