当我们打印PS1
的值时,设置为:
$ echo $PS1
[\u@\h \W]\$
我们可以使用env
命令打印环境变量。为什么不列出PS1
变量?
$ env | grep PS1
# No output here
答案 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 进行打印。但您可以使用设置命令进行打印。