在我的 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