Cor*_*ein 37 environment-variables
在 Linux bash 终端中,通常会设置许多环境变量,例如$PATH和$HOME。
是否可以查看所有已设置的环境变量?如何?
Sta*_*ish 35
TL;DR:使用(set -o posix ; set)
根据 Bash 手册,您可以使用set内置命令来显示已设置的所有环境变量。该set命令还将显示任何函数的定义。如果您只想查看变量而不是函数,那么您可以在运行 set 命令之前打开 POSIX 模式。最简单的方法是使用set -o posix,但这将使 POSIX 模式保持打开状态,直到您使用 将其关闭set +o posix。
因此,以下命令将使用子 shell 显示所有定义的环境变量,而不会影响当前 shell 中的 POSIX 合规性。
(set -o posix ; set)
Run Code Online (Sandbox Code Playgroud)
@RedGrittyBrick 和 @iglvzx 建议使用该env命令,但是该命令不会提供完整的环境变量列表。env将只显示已标记为导出的变量。比较env | sortand的输出,export -p你就会明白我的意思。comm -23 <(set -o posix; set) <(env|sort)如果您想查看哪些环境变量没有被导出,您可以运行。
差异的原因是它env是一个单独的可执行文件,而不是set一个 shell 内置命令。根据 Bash 手册,当执行的命令不是 shell 内置命令或函数时,它只会接收在 Bash 中标记为导出的环境变量。有很多变量没有导出。因此,如果您希望查看 shell 定义的所有变量,则必须使用set手册中所述的命令。
您可以使用以下命令轻松地为自己测试此行为。
MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE
Run Code Online (Sandbox Code Playgroud)
您将看到set提供输出而env没有提供输出。
Red*_*ick 25
env不带参数的命令将打印“导出”环境变量及其值的列表。这些变量对子进程可见——许多其他环境变量没有与此一起显示,仅在运行的 shell 内使用,例如用于配置。
Evg*_*eev 15
compgen -v
Run Code Online (Sandbox Code Playgroud)
打印 shell 变量(但不打印值)。
compgen -e
Run Code Online (Sandbox Code Playgroud)
打印导出的变量,即那些被这个 shell 启动的进程继承的变量(但不是它们的值)。
shell 和导出变量的区别:https : //unix.stackexchange.com/questions/3507/difference-between-environment-variables-and-exported-environment-variables-in-b?rq=1
我是通过搜索如何env 按字母顺序排列输出而来到这里的;这很简单
env | sort -f
Run Code Online (Sandbox Code Playgroud)
-f选项使排序忽略大小写,这可能是您 99% 的时间想要的| 归档时间: |
|
| 查看次数: |
44066 次 |
| 最近记录: |