循环内数组元素参数扩展异常:批量检查环境变量是否定义问题
问题原因
循环中element变量存储的是待检测环境变量的名称字符串,而非目标环境变量本身。你直接使用${element:+y}做判断时,实际检测的是element这个变量本身是否有值——而循环中element每次都会被赋值为env_var1、env_var2这类固定字符串,永远不为空,因此判断逻辑永远不会触发,无法实现目标检测效果。
修复方案
Bash 支持变量间接扩展语法${!变量名},可以将变量的值作为新的变量名,读取对应变量的实际内容,刚好适配批量检测的场景,修改后代码如下:
env_var_array=( env_var1 env_var2 env_var3 ) for element in "${env_var_array[@]}" do [ -z "${!element:+y}" ] && echo "$element var not defined." done
如果你需要兼容POSIX标准的Shell环境,可以使用eval实现同等效果(本场景下待检测变量名由你自行定义,无注入风险):
env_var_array="env_var1 env_var2 env_var3" for element in $env_var_array do eval "[ -z \"\${$element:+y}\" ]" && echo "$element var not defined." done
内容的提问来源于stack exchange,提问作者disp_name
相关产品推荐
相关产品推荐

