我如何在Linux bash终端中看到所有当前定义的环境变量的列表?


Answers:


32

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 | sortexport -p你会明白我的意思。comm -23 <(set -o posix; set) <(env|sort)如果要查看未导出哪些环境变量,可以运行。

出现差异的原因是,它env是一个单独的可执行文件,而不是setShell内置命令。根据Bash手册,当执行的命令不是Shell内置命令或函数时,它将仅接收已在Bash中标记为要导出的环境变量。有许多未导出的变量。因此,如果希望查看外壳程序已定义的所有变量,则必须使用set手册中所述的命令。

您可以使用以下命令轻松地自己测试此行为。

MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE

您将看到set提供输出,而env没有提供。


24

env不带参数的命令将打印“已导出”环境变量及其值的列表。这些变量对子流程可见-许多其他环境变量未与此一同显示,仅在运行的Shell内部使用,例如用于配置。


10
我比较喜欢printenv,因为两者envset具有不仅仅是输出环境等功能。
iglvzx 2012年

3
env将仅打印已标记为导出的环境变量列表。它不会打印所有变量。
海星

4
@Starfish是正确的-这表示这个已接受的答案非常错误。编辑说它只列出导出的变量。
Volker Siegel 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.