我怎样才能列出所有 shell 变量?

我怎样才能列出所有 shell 变量?

关于这个问题的阅读:在 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' ' '

相关内容