为什么env不打印PS1变量?

时间:2017-01-30 08:49:58

标签: linux bash environment-variables

当我们打印PS1的值时,设置为:

$ echo $PS1
[\u@\h \W]\$

我们可以使用env命令打印环境变量。为什么不列出PS1变量?

$ env | grep PS1
# No output here

2 个答案:

答案 0 :(得分:8)

因为PS1不是(通常,在您的特定情况下)环境变量。

bash实例中设置了许多变量,您可以列出:

$ set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:…
BASH_ALIASES=()
BASH_ARGC=()
.
.
SHLVL=1
SSH_AGENT_PID=853
SSH_AUTH_SOCK=/tmp/ssh-Ofupc03xWIs7/agent.795
TERM=xterm-256color

但其中许多不是环境变量。例如:

$ echo "$PPID"
1062

$ env | grep PPID

您可以使用export向环境添加变量。因此PS1可以设置为环境变量:

$ export PS1
$ env | grep PS1
PS1=\u@\h:\w\$

并且可以通过使用declare删除其导出标志来取消导出变量(这将保留变量的值,而不是导出):

$ declare +x PS1
$ env | grep PS1
$ echo $PS1
\u@\h:\w\$

或者更严重地通过unset变量:

$ unset PS1
$ env | grep PS1

在bash中,declare可用于打印变量标志:

$ declare -p PS1
declare -- PS1="\${debian_chroot:+(\$debian_chroot)}\\u@\\h:\\w\\\$ "

$ export PS1

$ declare -p PS1
declare -x PS1="\${debian_chroot:+(\$debian_chroot)}\\u@\\h:\\w\\\$ "

请注意导出后为变量设置的-x

答案 1 :(得分:2)

根据变量PS1的设置位置,可以将其视为局部变量或环境变量(请参阅此post设置环境)。

如果它是本地的,则无法使用 env 进行打印。但您可以使用设置命令进行打印。