Arrays 如何使用;“网格阵列”;在bash?

Arrays 如何使用;“网格阵列”;在bash?,arrays,bash,multidimensional-array,Arrays,Bash,Multidimensional Array,我有一堆文件,名字里有数字。每个文件编号都属于一个“组”或一系列编号。我想匹配它所在的组中的文件号,然后将其导出为变量。我不知道如何做到这一点,但我认为这类似于: Array: (A, 1, 20) (B, 21, 34) (C, 35, 52) (D, 53, 68) 其中第一列是组名,第二列是范围内的第一位数字,最后一列是范围内的最后一位数字。然后,我可以应用如下内容: if [ $num -ge "COLUMN2" ] && [ $num -le "COLUMN3" ];

我有一堆文件,名字里有数字。每个文件编号都属于一个“组”或一系列编号。我想匹配它所在的组中的文件号,然后将其导出为变量。我不知道如何做到这一点,但我认为这类似于:

Array:
(A, 1, 20)
(B, 21, 34)
(C, 35, 52)
(D, 53, 68)
其中第一列是组名,第二列是范围内的第一位数字,最后一列是范围内的最后一位数字。然后,我可以应用如下内容:

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

我刚刚开始学习bashshell代码,所以我真的希望你能在bash中给我一些方法。另外,我知道第二列似乎不必要,因为您可以在[$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
组名称=(“A”“B”“C”“D”)
组别(1 21 35 53)
组_max=(20 34 52 68)
组名=
对于((i=0;i<${组名称[@]};i++);做
如果[$num-ge${group_-min[i]}]&&&($num-le${group_-max[i]}];然后
groupname=“${group_名称[i]}”
打破
fi
完成
如果[-z“$groupname”];然后
echo“哎呀,找不到匹配的组!”
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
$number=51组=
$array=(“A 1 20”“B 21 34”“C 35 52”“D 53 68”)
“${array[@]}”中元素的$

>你能举一个输入和期望输出的例子吗?两组数字之间是否可能存在差距?上面的数字从1到68之间没有间隔。输入可以是任何数字,输出可以是与该数字对应的组名。所以如果我输入37,它将输出“C”。没有间隙,因为文件是一个接一个地创建的,并且附加了“总数”。但是,大于最后一个值的数字需要输出一条错误消息,提醒我添加达到该数字的组。谢谢!我曾想过类似的事情,但想知道是否有一种“更干净”或正确的方法。很高兴知道bash不能做“多维数组”(在这一点上,多维数组是否可以扩展到3维,或者只扩展到1和2维?如果不介意融合的话,那将是非常棒的)为什么需要为((i=0;i<${group_names[@]};i++)做
?对${group_names[@]}中的x进行
难道还不够吗?我不熟悉编码,希望了解两者之间的优势和区别。1:不同的语言具有不同的数组功能,但通常数组可以有任意多个维度(231维?没问题!)。2:“${group_names[@]}”中x的
(请注意,双引号可避免组名中的空格等问题)可用于迭代组名数组,但无法引用组名min和组名max中的相应项。相反,您需要迭代数组索引,并使用它访问所有三个数组中的值。