Bash循环遍历变量名并检查变量值是否为空的实现问题
检查列表中变量是否存在有效值的正确实现
要遍历变量名列表并检查对应变量是否为空,你可以用Bash的间接变量引用语法解决bad substitution错误,以下是两种可靠实现:
方法1:Bash原生间接引用(推荐)
这是Bash 2.0及以上版本支持的安全语法,无需额外命令:
vars=("username" "password") # 遍历数组时用双引号包裹,避免元素含空格时出错 for var in "${vars[@]}" do # ${!var} 实现间接引用:先取var的值,再获取对应变量的内容 if [ -z "${!var}" ] then echo "$var value is empty" exit 1 fi done
方法2:使用eval(需谨慎)
如果需要兼容更老的Shell环境,可以用eval,但注意仅在变量名完全可控的场景使用(避免恶意注入风险):
vars=("username" "password") for var in "${vars[@]}" do # 通过eval解析变量引用 eval "current_value=\$$var" if [ -z "$current_value" ] then echo "$var value is empty" exit 1 fi done
内容的提问来源于stack exchange,提问作者kravb
相关产品推荐
相关产品推荐

