如何列出所有变量名称及其当前值?
不仅包括$HOME
,$PWD
等等,还包括您定义的任何其他。
如何列出所有变量名称及其当前值?
不仅包括$HOME
,$PWD
等等,还包括您定义的任何其他。
Answers:
对于bash:(Ubuntu中的标准shell)
在终端中输入以下命令以打印所有环境变量:
printenv
有关此命令的更多信息,请阅读printenv
手册页。
要显示包括“外壳变量”的列表,您可以输入以下命令:
( set -o posix ; set ) | less
这不仅会向您显示shell变量,还会向您显示环境变量。
有关与此主题相关的更多信息,请阅读:
对于zsh :(高级shell)
使用以下命令:
( setopt posixbuiltin; set; ) | less
有关ZSH选项的更多信息,请参见zshoptions
手册页。
MYNEWVARIABLE=Ubuntu
并执行printenv
,则不会显示该终端。为什么会这样,其他人又如何出现?
export MYNEWVARIABLE=Ubuntu
,它将按您期望的那样工作。
set
,它也会列出您创建的变量。或做set | grep myvar
printenv
是一个外部命令,因此它仅知道(并打印)导出的环境变量。 set
是内部bash命令,因此它显示所有“ shell变量”(未导出的环境变量)以及导出的环境变量。
unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
,但是可以unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW
,而且可以unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW
。使用export表示“我正在设置的变量应该是传递给进程的环境的一部分,而不仅仅是此shell中的变量。” 我的第三个示例说:“变量应该是传递给THIS流程的环境的一部分,但不能紧随其后。”
我知道这个问题已经很老了并且可以回答,但是我想我可以添加一些有用的信息。
在上述所有方法中,建议的过程为:
env
,或
printenv
或任何这些解决方案的问题是,您正在看到运行到终端的shell的环境变量。您没有看到应用程序可使用的环境变量,例如直接通过图形界面运行。
例如,如果您使用~/.profile
,或.bashrc
或.zshenv
(取决于您的外壳)来修改环境变量-就像在路径中经典添加目录,这将引起注意。
要查看可在图形环境中直接启动的应用程序可用的环境变量,可以执行以下操作(在Gnome Shell中,我确定所有其他DE中都有等效的方法):
xterm -e bash --noprofile --norc
(或者,如果没有xterm
,则gnome-terminal -- bash --noprofile --norc
感谢@Mike Nakis的评论)。
现在,您的终端机的外壳没有添加任何环境变量。您可以使用env
此处列出所有环境变量:
显然,新的Shell将具有由系统文件添加的环境变量,但是无论如何,这些变量应该对系统中的所有程序都是可用的(通过继承)。
我发布此消息是因为这是我第四次必须再次搜索此技巧以检查.pam_environment
文件。所以现在我会更快地找到它(在此过程中,我希望能帮助其他人...)
xterm -e bash --noprofile --norc
使用图形界面启动Ubuntu时不读取和执行启动文件,因为这些文件不会被执行?参见askubuntu.com/q/1025845/1471
gnome-terminal -- bash --noprofile --norc
您可以使用declare
内置函数查看所有变量。
declare -p
如果您只对环境变量感兴趣,请使用
declare -xp
运行help declare
以查看其他选项。
要使用CTRL+ ALT+ 在终端中列出环境变量,T可以使用env
命令。
例如 :
[raja@localhost ~]$ env
XDG_VTNR=1
SSH_AGENT_PID=3671
XDG_SESSION_ID=3
HOSTNAME=localhost.localdomain
IMSETTINGS_INTEGRATE_DESKTOP=yes
GPG_AGENT_INFO=/home/raja/.gnupg/S.gpg-agent:3691:1
GLADE_PIXMAP_PATH=:
TERM=xterm-256color
SHELL=/bin/bash
XDG_MENU_PREFIX=xfce-
DESKTOP_STARTUP_ID=
HISTSIZE=1000
XDG_SESSION_COOKIE=0250277dd805498381e96c05d88068b0-1364679772.845276-1676152201
WINDOWID=65011716
GNOME_KEYRING_CONTROL=/home/raja/.cache/keyring-N3QoQ2
IMSETTINGS_MODULE=none
QT_GRAPHICSSYSTEM_CHECKED=1
USER=raja
等等
希望能有所帮助。
这里的大多数解决方案要么只打印环境变量,要么具有env或(set -o posix; posix)不能以可解析形式打印值的缺点(尝试打印变量A = $'a \ r \ nb'...) 。
这是一个将以POSIX转义格式打印所有变量(每行一个变量)的函数:
function dump_vars {
local VARNAME
compgen -v | while read -r VARNAME; do
printf "$VARNAME=%q\n" "${!VARNAME}"
done
}
感谢@tmgoblin指出使用compgen -v。
env是POSIX 7方式:
export asdf=qwer
env | grep asdf
样本输出:
asdf=qwer
它仅显示导出的变量:非导出的变量通常不被视为“环境变量”。
优先选择printenv
,而不是POSIX。两者似乎都没有参数就做同样的事情:https : //unix.stackexchange.com/questions/123473/what-is-the-difference-between-env-and-printenv
env
以更好的格式显示出来,并且我添加了更多信息。