如何列出所有shell变量?


Answers:


21

列出所有shell变量

bash:使用set -o posix ; set。那里的POSIX选项可以避免输出过多的信息,例如函数定义。declare -p也可以。

zsh : 采用 typeset

Shell变量和环境变量

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

(感谢评论完成)


declare -p做同样的事情
Costas 2014年

这个问题也在这里有一个答案:stackoverflow.com/questions/1305237/...
尤利尔

1
set -o posix在zsh中不存在;set不输出函数定义。
vinc17 2014年

1
set -o posix在大多数shell中是语法错误。
mikeserv 2014年

3
Shell变量在子进程中也可用。区别在于子进程执行新程序时:环境变量传入exec,shell变量不传入。
Barmar 2014年

7

有很多选择:

打印环境

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

环保

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

出口

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

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

如果没有提供名称,或者提供了-p选项,则会显示导出名称的列表。

对于获取shell变量也很有用。

如果您需要其他信息(整数,导出),则应改用

排字

导出具有一个优点,即可以立即将其输出读回到外壳上。

最后,有

compgen -v

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

它显示所有变量,shell和环境,但不包含其值或额外信息。您将必须回显$ VARIABLE_NAME来找到变量值。但是至少列表是完整的。它属于bash,不属于zsh


1
exportset至少在重新输入shell报价方面没有优势。而且,printenvenvshell变量无关,尽管它们确实经常与环境变量一致。
mikeserv

3

使用zsh,您可以使用typeset,它比给出更多的信息set,例如变量的类型。您仍然可以根据需要使用grep或过滤输出sed。环境变量exported在输出中标记为。

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.