阅读有关此问题的信息:在zsh中如何列出所有环境变量?,我想知道如何列出所有shell变量?
另外,shell变量和环境变量之间的区别是否适用于zsh以外的其他shell?
我主要对Bash和Zsh感兴趣,但是很高兴知道如何在其他主流Shell中做到这一点。
阅读有关此问题的信息:在zsh中如何列出所有环境变量?,我想知道如何列出所有shell变量?
另外,shell变量和环境变量之间的区别是否适用于zsh以外的其他shell?
我主要对Bash和Zsh感兴趣,但是很高兴知道如何在其他主流Shell中做到这一点。
Answers:
bash
:使用set -o posix ; set
。那里的POSIX选项可以避免输出过多的信息,例如函数定义。declare -p
也可以。
zsh
: 采用 typeset
环境变量可用于exec()
-ed子进程(作为副本。如果父进程更改了该变量,则不会更新子环境)。非环境变量仅适用于当前正在运行的shell,并且fork()
-ed子。这种区别存在于所有外壳中。
(感谢评论完成)
set -o posix
在zsh中不存在;set
不输出函数定义。
set -o posix
在大多数shell中是语法错误。
exec
,shell变量不传入。
有很多选择:
打印环境
打印指定环境变量的值。如果未指定VARIABLE,则为它们全部打印名称和值对。
环保
env-在修改后的环境中运行程序
出口
设置环境变量。标记每个要传递给环境中子进程的名称。
-p以可复用为输入的形式显示输出。
如果没有提供名称,或者提供了-p选项,则会显示导出名称的列表。
组
对于获取shell变量也很有用。
如果您需要其他信息(整数,导出),则应改用
排字
导出具有一个优点,即可以立即将其输出读回到外壳上。
最后,有
compgen -v
根据选项显示可能的完成。
它显示所有变量,shell和环境,但不包含其值或额外信息。您将必须回显$ VARIABLE_NAME来找到变量值。但是至少列表是完整的。它属于bash,不属于zsh。
export
set
至少在重新输入shell报价方面没有优势。而且,printenv
与env
shell变量无关,尽管它们确实经常与环境变量一致。
declare -p
做同样的事情