首页 > 解决方案 > 如何检查变量是否按名称存在

问题描述

如果变量不存在,我正在尝试通过脚本创建环境变量。

我正在为此做的事情如下:

    local env_variable_name="VARIABLE_"$id
    if [[ -z "${env_variable_name}" ]]; then
        break
    else
        local env_var_value=$(generate_value $some_argument)
        export "$env_variable_name"="${env_var_value}"
    fi

我的目标是创建一个环境变量,我可以为其选择自己的动态名称。如果再次触发脚本,我想防止脚本覆盖最初设置的值。

如果我使用“源”运行脚本,它会按预期工作。我设置并保留的环境变量。如果我再次运行脚本,环境变量的值将被覆盖。正确的方法是检查环境变量是否按其名称存在,但如果不知道变量名称如何并将其硬编码到脚本中,我无法找到一种方法。

标签: bashshellenvironment-variables

解决方案


关于这一点,我找到了正确的解决方案:https ://stackoverflow.com/a/35412000/10781626

正确的代码如下 - 我需要更改 if 语句:

    local env_variable_name="VARIABLE_"$id
    if (declare -p "${env_variable_name}" &>/dev/null); then
        break
    else
        local env_var_value=$(generate_value $some_argument)
        export "$env_variable_name"="${env_var_value}"
    fi

如果已设置具有传递名称的变量,则 declare 命令返回成功,这将导致 if 部分的正确调用!


推荐阅读