You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:07:13