bash - 如何检查变量是否按名称存在
问题描述
如果变量不存在,我正在尝试通过脚本创建环境变量。
我正在为此做的事情如下:
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
我的目标是创建一个环境变量,我可以为其选择自己的动态名称。如果再次触发脚本,我想防止脚本覆盖最初设置的值。
如果我使用“源”运行脚本,它会按预期工作。我设置并保留的环境变量。如果我再次运行脚本,环境变量的值将被覆盖。正确的方法是检查环境变量是否按其名称存在,但如果不知道变量名称如何并将其硬编码到脚本中,我无法找到一种方法。
解决方案
关于这一点,我找到了正确的解决方案: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 部分的正确调用!
推荐阅读
- multithreading - 如何使用多线程迭代具有许多记录的列表
- sql - 是否应该通过 DISABLE TRIGGER ALL 禁用外键约束检查?
- hibernate - Hibernate Persist 单向一对多关系
- javascript - 使用 setTimeout,输入值增加 2 而不是 1
- python - 将 Pandas df 分离到单独的表中
- amazon-web-services - AWS 应用程序负载均衡器或网络负载均衡器上的 Websocket Wss
- amazon-s3 - 使用 pyspark 从 S3 导入时缺少数据
- javascript - npm 在用户目录中寻找 package.json
- reactjs - 如何将 JSON 传递给 SwaggerUIBundle?
- makefile - 在 Makefile 中使用 fprint 格式化输出和 pwd 输出