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

Joe*_*jr2 0 command-line shell environment-variables

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

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

我试过这个:

$ echo -z "${MY_URDSFDFS}"
Run Code Online (Sandbox Code Playgroud)

但它只是打印:

-z
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 6

使用参数扩展的形式。如果未设置且已设置,则为空,即使它是空的。(而如果未设置或为空,则为空,并且如果设置为非空值。)${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
Run Code Online (Sandbox Code Playgroud)

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

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

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