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

Bash While循环中检查双命令返回值的问题求助

解决Bash while循环中多命令返回值检查的问题

问题根源

你遇到的问题确实是&&的短路求值特性导致的:当! array1=(getSensorValues 1)的结果为假(也就是getSensorValues 1执行成功、返回0),&&后面的array2=(getSensorValues 2)会被直接跳过,自然无法给array2赋值。同时你的逻辑需求是只要两个命令中有一个失败(返回1)就重试,原条件的逻辑也不符合这个要求。

修正后的代码

set +e
while true; do
    # 执行两个传感器取值命令,确保无论前一个结果如何都执行
    array1=($(getSensorValues 1))
    ret_code1=$?
    array2=($(getSensorValues 2))
    ret_code2=$?

    # 只有当两个命令都成功时,退出循环
    if [[ $ret_code1 -eq 0 && $ret_code2 -eq 0 ]]; then
        break
    fi

    echo "failed to get sensor values, retrying"
    sleep 0.1
done
echo "array 1: ${array1[*]}"
echo "array 2: ${array2[*]}"
set -e

关键修改说明

  • 强制执行两个命令:把两个赋值操作从while条件中移到循环体内分开执行,彻底避免短路求值导致的某个命令被跳过的问题。
  • 明确判断成功条件:保存每个命令的返回码,只有当两个返回码都为0时(表示都执行成功),才退出循环,否则进入重试逻辑,完全匹配你的需求。
  • 修正语法细节:原代码中的中文单引号‘’改为英文格式,同时修正set e+为正确的set +e(关闭errexit选项)。

内容的提问来源于stack exchange,提问作者Mickthekangaroo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:02:21