Answers:
TL; DR:使用(set -o posix ; set)
根据Bash手册,您可以使用set
内置命令来显示所有已设置的环境变量。该set
命令还将显示任何功能的定义。如果只想查看变量而不是函数,则可以在运行set命令之前打开POSIX模式。最简单的方法是使用set -o posix
,但这将使POSIX模式保持打开状态,直到您使用关闭它为止set +o posix
。
因此,以下命令将通过使用子外壳显示所有已定义的环境变量,而不会影响当前外壳中的POSIX合规性。
(set -o posix ; set)
建议使用@RedGrittyBrick和@iglvzx env
命令,但是此命令不会提供环境变量的完整列表。env
将仅显示已标记为要出口的容器。比较器的输出env | sort
和export -p
你会明白我的意思。comm -23 <(set -o posix; set) <(env|sort)
如果要查看未导出哪些环境变量,可以运行。
出现差异的原因是,它env
是一个单独的可执行文件,而不是set
Shell内置命令。根据Bash手册,当执行的命令不是Shell内置命令或函数时,它将仅接收已在Bash中标记为要导出的环境变量。有许多未导出的变量。因此,如果希望查看外壳程序已定义的所有变量,则必须使用set
手册中所述的命令。
您可以使用以下命令轻松地自己测试此行为。
MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE
您将看到set
提供输出,而env
没有提供。
env
不带参数的命令将打印“已导出”环境变量及其值的列表。这些变量对子流程可见-许多其他环境变量未与此一同显示,仅在运行的Shell内部使用,例如用于配置。
printenv
,因为两者env
并set
具有不仅仅是输出环境等功能。
env
将仅打印已标记为导出的环境变量列表。它不会打印所有变量。
compgen -v
打印外壳变量(但不打印值)。
compgen -e
打印导出的变量,即由该外壳程序启动的进程继承的变量(但不包括其值)。
Shell和导出变量之间的区别:https : //unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
compgen -e
正是我想要的!