如何在 bash 中使用"grid arrays"?



我有一堆文件名中带有数字的文件。每个文件号都属于一个"组"或数字范围。我想匹配的组内的文件编号,它是在,然后导出为一个变量。我不确定如何做到这一点,但我认为它类似于:

Array:
(A, 1, 20)
(B, 21, 34)
(C, 35, 52)
(D, 53, 68)

其中第一列为组名,第二列为范围的第一个数字,最后一列为范围的最后一个数字。然后,我可以应用如下内容:

if [ $num -ge "COLUMN2" ] && [ $num -le "COLUMN3" ]; then
    groupname=COLUMN1
fi

我是一个编码新手,刚刚开始学习bash shell,所以我真的希望您只给我在bash中实现这些的方法。另外,我知道当您只执行while [ $num -ge "COLUMN3" ]时,第二列似乎没有必要,但是我在脚本的后面需要第一列。

bash实际上不支持多维数组,但是出于这个目的,使用一系列的单维数组就可以了:

group_names=("A" "B" "C" "D")
group_min=(1 21 35 53)
group_max=(20 34 52 68)
groupname=
for (( i=0; i < ${#group_names[@]}; i++ )); do
    if [ $num -ge ${group_min[i]} ] && [ $num -le ${group_max[i]} ]; then
        groupname="${group_names[i]}"
        break
    fi
done
if [ -z "$groupname" ]; then
    echo "Oops, no matching group found!"
fi

这可能也适用于您:

$ number=51 group=
$ array=("A 1 20" "B 21 34" "C 35 52" "D 53 68")
$ for element in "${array[@]}"
> do read key min max <<<"$element"
> (( number >= min && number <= max )) && group=$key && break
> done
$ [[ $group ]] && echo "number=$number group=$group" || echo "number=$number no match"
$ number=51 group=C

相关内容

  • 没有找到相关文章

最新更新