环境变量可以用env
; 显示,但有些变量未显示。例如...
echo $EUID
可能会产生结果,1000
但
env | grep EUID
不会产生任何结果。
这种类型的变量是什么?只读环境变量?
所有 shell 是否都按照某种约定设置相同的变量?
如何列出这些隐藏变量呢?
答案1
该set
命令显示所有变量(和函数),而不仅仅是导出的变量,因此
set | grep EUID
将显示您所需的值。此命令应显示所有未导出的变量:
comm -23 <(set | grep '^[^=[:space:]]\+=' | sort) <(env | sort)
答案2
没有隐环境变量。
所有内容都打印有env
或printenv
。
您所做的是打印变量的值EUID
,但该变量未导出。
$ bash -c 'declare -p EUID'
declare -ir EUID="1000"
即: ( i
) 表示整数, ( r
) 表示只读。x
但导出时没有 ( )。
$ zsh -c 'typeset -p EUID'
typeset -i10 EUID=1000
即 ( i
) 表示整数,( 10
) 表示以 10 为基数(小数)。
反而:
$ bash -c 'declare -p PATH'
declare -x PATH="…"
$ zsh -c 'typeset -p PATH'
export PATH=…