检查是否从命令行设置了环境变量

检查是否从命令行设置了环境变量

我想知道是否从命令行设置了特定的环境变量。我需要区分它被设置为空白字符串(或只是空白)和根本没有设置,所以我想得到一个明确的真/假或是/否,而不是如果没有设置则不打印任何内容。

我知道在脚本中,我可以使用-z,但我不确定是否/如何可以直接从命令行执行此操作。

我试过这个:

$ echo -z "${MY_URDSFDFS}"

但它只是打印:

-z

答案1

使用以下形式${VAR+TEXT}参数扩展。如果未设置且已设置,${VAR+1}则为空,即使它为空。 (如果未设置或为空,则为空,并且如果设置为非空值。)VAR1VAR${VAR:+1}VAR1VAR

if [ -n "${MY_URDSFDFS+1}" ]; then
  echo "\$MY_URDSFDFS is set"
else
  echo "\$MY_URDSFDFS is not set"
fi

这适用于任何 POSIX 或 Bourne shell,即所有现代甚至最古老的 sh 方言。

这不区分环境变量和shell变量。如果必须拒绝非导出的 shell 变量,可以在单独的进程中进行测试:sh -c 'test -n "${MY_URDSFDFS+1}"'。但这很少是一个问题。

请注意,这通常是一个坏主意,因为有时取消设置变量很不方便,有时将其设置为空字符串也不方便。通常,空环境变量应与未设置的环境变量同等对待。

答案2

zshshell 中,要测试变量是否已设置,除了标准 之外[ -n "${var+set}" ],还可以使用(( $+var )),其中如果设置则$+var扩展为 1 ,否则扩展为 0。$var

请注意,在 中zsh,当您执行export varwhile$var之前未设置的操作时,除非在或仿真zsh中运行,否则会自动分配一个值(数字变量为 0,数组/哈希变量为空列表(导出这些变量没有意义),空列表否则),所以这些测试将返回 true。shksh

要测试变量是否已设置以及它是否在环境中,您可以执行以下操作

if [[ -$parameters[var]- = *-export-* ]]; then
  echo var is set and exported to the environment
fi

(或${(t)var}代替$parameters[var])。

也可以看看这是“如何检查‘if’语句中是否存在变量?”的答案以便进一步考虑此事。

相关内容