如何使 UNIX“set”命令仅打印环境变量

如何使 UNIX“set”命令仅打印环境变量

我习惯于使用 bashset命令仅列出环境设置列表,例如 PATH 等。

但是,在我刚刚设置的 Ubuntu 系统上,执行set转储 2000 行文本,其中包括许多如下函数:

dequote () 
{ 
    eval printf %s "$1" 2> /dev/null
}

我如何仅打印环境变量?

答案1

默认set显示shell 变量,而不仅仅是环境变量。bash函数中的变量被视为变量的一部分。请参阅https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference

如果你使用envprintenv他们会显示环境导出到子进程,但不是一定与您的环境相同bash

$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1

bashdeclaretypeset内置命令可以列出所有类型的变量,以省略函数:

declare -F

这些输出的形式适合在 shell 脚本中重新创建状态,因此有点冗长,但您可以区分数组、整数和其他类型(取决于版本)。另请参阅 的输出export -p

来自https://stackoverflow.com/questions/1305237/how-to-list-variables-declared-in-script-in-bash 你可以告诉 bash 使用 POSIX 模式,并且set“正确”地运行:

( set -o posix ; set ) 

它是在子 shell 中运行的,因此它不会改变正在运行的 shell,并且它会正确地获取尚未导出到继承环境中的变量。

答案2

如果您想列出所有环境变量,只需输入env

相关内容