如何列出所有 shell 变量?

Jos*_*osh 30 bash zsh environment-variables

阅读有关此问题的信息:在 zsh 中,我如何列出所有环境变量?,我想知道,我怎样才能列出所有的shell 变量

另外,shell变量和环境变量之间的区别是否适用于zsh以外的shell?

我主要对 Bash 和 Zsh 感兴趣,但如果知道如何在其他主流 shell 中做到这一点会很棒。

Uri*_*iel 30

列出所有 shell 变量

bash: 使用set -o posix ; set。POSIX 选项用于避免输出太多信息,例如函数定义。declare -p也有效。

zsh : 用 typeset

Shell变量和环境变量

环境变量可用于exec()-ed 子进程(作为副本。如果父进程更改变量,则子环境不会更新)。非环境变量仅适用于当前运行的 shell 和fork()-ed 子 shell。这种区别存在于所有 shell 中。

(完成感谢评论)

  • Shell 变量也可用于子进程。区别在于子进程执行新程序时:环境变量在 `exec` 中传递,shell 变量不是。 (3认同)
  • zsh 中不存在“set -o posix”;`set` 不输出函数定义。 (2认同)

Mar*_*iae 13

有很多选择:

打印环境

打印指定环境变量的值。如果未指定 VARIABLE,则为它们全部打印名称和值对。

环境

env - 在修改后的环境中运行程序

出口

设置环境变量。标记要传递给环境中子进程的每个名称.....

-p 以可重复用作输入的形式显示输出。

如果没有提供名字,或者给出了`-p' 选项,就会显示一个导出名字的列表。

也可用于获取 shell 变量。

如果你需要额外的信息(整数,导出),你应该使用

排版

export有一个优点,它的输出可以立即读回 shell。

最后,有

compgen -v

根据选项显示可能的完成。

它显示所有变量、shell 和环境,没有它们的值或额外信息。您必须回显 $VARIABLE_NAME才能找到变量值。但至少清单是完整的。它属于bash,而不是zsh