env、declare 和 compgen -v 之间有什么区别?

env、declare 和 compgen -v 之间有什么区别?

我看到了,printenvenv给出了相同的输出。当进一步挖掘以获取完整的环境变量列表时,我发现了 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 -pdeclare以可重复使用的方式打印 shell 变量的详细信息,通常以更多命令的形式。该选项将输出限制为导出的变量。稍后可以-x对 的输出进行'd ,以返回变量的给定状态。declareeval

set可用于设置各种 shell 选项或位置参数。如果没有给出参数或选项,则它会打印所有 shell 变量和函数

export可用于导出变量或函数。使用该-p选项,它会打印导出的变量和函数。

相关内容