我看到了,printenv
并env
给出了相同的输出。当进一步挖掘以获取完整的环境变量列表时,我发现了 declare -xp
来自的命令这里:
compgen -v | while read line; do echo $line=${!line};done
就环境变量而言,这些命令之间有什么区别。
答案1
该env
命令可以运行修改环境的其他命令。如果没有给出命令,则env
打印环境变量(即出口变量)。printenv
只能打印环境变量(不能运行命令)。请参见这个 U&L 问题了解两者之间的更多差异。
compgen -v
仅输出名称所有 shell 变量,无论是否导出。这就是为什么您必须使用变量间接寻址 ( ${!line}
) 来获取变量的值。compgen -v
通常用于制表符补全。
declare -p
declare
以可重复使用的方式打印 shell 变量的详细信息,通常以更多命令的形式。该选项将输出限制为导出的变量。稍后可以-x
对 的输出进行'd ,以返回变量的给定状态。declare
eval
set
可用于设置各种 shell 选项或位置参数。如果没有给出参数或选项,则它会打印所有 shell 变量和函数。
export
可用于导出变量或函数。使用该-p
选项,它会打印导出的变量和函数。