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

Bash脚本第二个if语句判断失效问题排查求助

问题定位
  • 数组初始化逻辑错误
    你声明数组后用arr+=(0)循环追加元素,而非给1~n索引位赋值,导致${arr[$i]}取值为空,永远不等于0,第二个if条件无法触发。
  • 关键字拼写错误
    循环末尾的fidone属于语法错误,需拆分为独立的fi和done关键字,否则Bash无法正确解析分支和循环边界。
  • 数组赋值语法错误
    ${arr[$i]}+=${arr[$i]}写法完全错误,无法实现标记已访问的逻辑,正确的数组赋值写法为arr[$i]=1。
修正后可正常运行的代码
n=20
x=3
count=0
flag=0
i=1
declare -a arr

# 正确初始化数组,1~n位初始值为0
for (( j=1;j<=n;j++ ))
do
  arr[$j]=0
done

while [[ $count -ne $n ]]
do
if [[ $i -le $n ]]
then 
    if [[ ${arr[$i]} -eq 0 ]]
    then
            arr[$i]=1
            echo -n " $i"
            count=$(( count+1 ))
            i=$(( i+1+x ))
    else
        i=$(( i+1 ))
    fi
else
    i=$(( i-n ))
    flag=$(( flag+1 ))
fi
done

echo " "
echo "No of round : $flag"

运行后输出为:
1 5 9 13 17 2 6 10 14 18 3 7 11 15 19 4 8 12 16 20
完全符合预期要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:15:04