在 中bash
,我知道有几种方法可以检查给定变量是否已定义并包含值。但是,我想检查环境中是否存在给定变量,而不仅仅是局部变量。例如 ...
VAR1=value1 # local variable
export VAR2=value2 # environment variable
if [[ some_sort_of_test_for_env_var VAR1 ]]
then
echo VAR1 is in the environment
else
echo VAR1 is not in the environment
fi
if [[ some_sort_of_test_for_env_var VAR2 ]]
then
echo VAR2 is in the environment
else
echo VAR2 is not in the environment
fi
如何some_sort_of_test_for_env_var
定义才能使上面的 bash 代码打印出以下两行?
VAR1 is not in the environment
VAR2 is in the environment
我知道我可以定义一个 shell 函数来运行env
并对变量名执行 agrep
操作,但我想知道是否有一种更直接的“类似 bash”的方法来确定给定变量是否在环境中,而不仅仅是一个局部变数。
先感谢您。
答案1
你的标题和正文有很大不同。
你的标题要么不可能,要么毫无意义。 bash 中的所有环境变量也是 shell 变量,因此没有环境变量可以“仅”存在于环境中。
为了你的身体
if declare -p VARNAME | grep -q '^declare .x'; then # it's in the environment
# or typeset if you prefer the older name
如果你特别想要[[
语法
if [[ $(declare -p VARNAME) == declare\ ?x* ]] # ditto
答案2
您可以生成一个新的 shell 并查询该变量是否存在:
$ bash -c '[[ -v VAR2 ]]' && echo variable is exported || echo variable is not exported
variable is exported
$ bash -c '[[ -v VAR1 ]]' && echo variable is exported || echo variable is not exported
variable is not exported