Bash循环为空变量赋值报错:integer expression expected
问题排查与解决
报错原因
你使用了-eq操作符判断字符串是否为空,而-eq是Bash中专门用于整数比较的符号,空字符串不属于合法整数,因此触发"integer expression expected"错误。
修正方案
方案1:用-z检查空字符串(修正原脚本逻辑)
-z是Bash标准的空字符串判断选项,用于检测字符串长度是否为0,完美匹配你的场景:
for variable in "var1" "var2" "var3" "var4"; do if [ -z "${!variable}" ]; then eval "$variable='empty'" fi done
方案2:避免eval的安全写法(推荐)
eval存在潜在安全风险(若变量名不可控时可能被注入),可以用declare或printf替代:
用declare赋值
for variable in "var1" "var2" "var3" "var4"; do if [ -z "${!variable}" ]; then declare "$variable=empty" fi done
用printf赋值(Bash 4.3及以上版本支持)
for variable in "var1" "var2" "var3" "var4"; do if [ -z "${!variable}" ]; then printf -v "$variable" '%s' 'empty' fi done
验证结果
运行修正后的脚本后,变量值将符合预期:
var1="Hedrickson" var2="Johnson" var3="empty" var4="Mulles"
内容的提问来源于stack exchange,提问作者Almosino
相关产品推荐
相关产品推荐

