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
相关产品推荐
相关产品推荐

