为什么env不打印PS1变量?

tux*_*dna 7 linux bash environment-variables

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

$ echo $PS1
[\u@\h \W]\$
Run Code Online (Sandbox Code Playgroud)

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

$ env | grep PS1
# No output here
Run Code Online (Sandbox Code Playgroud)

sor*_*tar 10

因为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
Run Code Online (Sandbox Code Playgroud)

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

$ echo "$PPID"
1062

$ env | grep PPID
Run Code Online (Sandbox Code Playgroud)

您可以使用将变量添加到环境中export.所以PS1可以设置为环境变量:

$ export PS1
$ env | grep PS1
PS1=\u@\h:\w\$
Run Code Online (Sandbox Code Playgroud)

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

$ declare +x PS1
$ env | grep PS1
$ echo $PS1
\u@\h:\w\$
Run Code Online (Sandbox Code Playgroud)

或者,通过unset变量更彻底地:

$ unset PS1
$ env | grep PS1
Run Code Online (Sandbox Code Playgroud)

在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\\\$ "
Run Code Online (Sandbox Code Playgroud)

注意-x导出后的变量集.