bash:确定环境中是否存在特定变量?

bash:确定环境中是否存在特定变量?

在 中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

相关内容