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

Shell脚本如何使用循环简化数组赋值与元素比较代码

Shell脚本简化方案

你原有代码的冗余点主要集中在两部分:一是手动将数组每个元素赋值给独立变量,二是重复编写了5段逻辑完全相同的大小判断代码,完全可以通过循环消除这些重复逻辑,同时保留原有功能不变。

核心优化点

  • 无需手动为数组每个元素创建单独变量,直接通过数组下标访问元素即可
  • 重复的大小比较逻辑统一放入循环,通过循环变量控制下标取值,消除重复的if-else块
  • 录入数组元素时可以用nameref引用减少分支判断,进一步简化代码

简化后完整代码

#!/bin/bash
declare -a Array1 Array2

# 录入两个数组的元素
for ((i=1; i<=2; i++)); do
    echo "(Array $i)"
    # 引用当前操作的数组,省去判断数组序号的分支
    declare -n cur_arr="Array$i"
    for ((j=0; j<5; j++)); do
        read -p "Enter number: " num
        cur_arr[$j]="$num"
    done
done

echo "(Array 1) ${Array1[@]}"
echo "(Array 2) ${Array2[@]}"

# 循环逐对比较,替代所有重复的if判断块
for ((j=0; j<5; j++)); do
    val1=${Array1[$j]}
    # 对齐原有逻辑:Array1的第j位对应Array2的倒数第j位
    val2=${Array2[$((4-j))]}
    if (( val1 > val2 )); then
        echo "$val1 > $val2"
    elif (( val1 < val2 )); then
        echo "$val1 < $val2"
    else
        echo "$val1 == $val2"
    fi
done

兼容性说明

如果你的bash版本低于4.3不支持declare -n nameref特性,只需要把录入部分的代码换回你原来的if判断即可,后续的循环比较逻辑不需要改动,功能完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 09:48:27