关于这个问题的阅读:在 zsh 中如何列出所有环境变量?,我想知道,如何才能列出所有外壳变量?
另外,两者之间有区别吗?壳变量和环境变量适用于 zsh 以外的 shell?
我主要对 Bash 和 Zsh 感兴趣,但如果知道如何在其他主流 shell 中执行此操作,那就太好了。
答案1
列出所有 shell 变量
bash
: 使用set -o posix ; set
。该posix
选项避免输出太多信息,例如函数定义。declare -p
也有效。
zsh
: 使用typeset
。
shell变量和环境变量
环境变量可用于exec()
-ed 子进程(作为副本;如果父进程更改该变量,则子环境不会更新)。非环境变量仅适用于当前运行的 shell 和fork()
-ed 子 shell。这种区别存在于所有 shell 中。
答案2
有很多替代方案:
打印环境
打印指定环境变量的值。如果未指定 VARIABLE,则打印所有变量的名称和值对。
环境
env - 在修改后的环境中运行程序
出口
设置环境变量。标记要传递给环境中子进程的每个名称......
-p 以可重复用作输入的形式显示输出。
如果未提供名称,或者给出了“-p”选项,则会显示导出名称的列表。
放
对于获取 shell 变量也很有用。
如果您需要额外的信息(整数,导出),您应该使用
排版
出口它的一个优点是它的输出可以立即读回 shell。
最后,还有
compgen-v
根据选项显示可能的完成情况。
它显示所有变量、shell 和环境,没有它们的值或额外信息。你不得不回显 $VARIABLE_NAME找到变量值。但至少清单是完整的。它属于巴什, 不是桀骜。
答案3
通过zsh
,您可以使用typeset
,它比 提供更多信息set
,例如变量的类型。您仍然可以根据需要使用grep
或过滤输出。环境变量在输出中sed
被标记为。exported
答案4
我只需要列出变量,而不是它们的值。为此,我使用了
env | awk -F '=' '{ print $1 }'
将它们全部放在一行中
env | awk -F '=' '{ print $1 }' | tr '\n' ' '