在 Linux Shell 脚本中,原生并不支持真正的多维数组。但别担心!通过巧妙地使用一维数组和索引计算,我们可以轻松模拟多维数组的行为。本教程将从零开始,带你一步步掌握这一实用技巧。
当你处理表格数据、矩阵运算或坐标系统时,二维甚至三维结构会非常方便。虽然 Bash 不直接支持这些,但我们可以通过字符串拼接、数学计算等方式“伪造”出多维效果。
假设我们要创建一个 3x3 的“二维数组”,可以这样操作:
# 初始化一个“二维数组”declare -A matrix# 赋值:matrix[行,列] = 值matrix[0_0]=1matrix[0_1]=2matrix[0_2]=3matrix[1_0]=4matrix[1_1]=5matrix[1_2]=6matrix[2_0]=7matrix[2_1]=8matrix[2_2]=9# 打印整个“矩阵”for i in {0..2}; do for j in {0..2}; do echo -n "${matrix[$i_$j]} " done echo # 换行done注意:这里我们使用了 Bash 的关联数组(declare -A),它允许使用字符串作为索引。通过将行号和列号用下划线连接(如 1_2),我们就模拟出了二维结构。

如果你知道数组的宽度(比如每行有 cols 列),也可以用数学方式将二维坐标转为一维索引:
cols=3# 创建一维数组arr=(1 2 3 4 5 6 7 8 9)# 获取 matrix[i][j] 的值get_value() { local i=$1 local j=$2 echo ${arr[$((i * cols + j))]}}# 示例:打印 matrix[1][2]echo $(get_value 1 2) # 输出 6这种方法适合性能要求较高的场景,因为它避免了字符串拼接,但前提是数组必须是规则的矩形(每行元素数量相同)。
假设我们有 2 个学生,每人有 3 门课的成绩:
declare -A grades# 学生0:语文、数学、英语grades[0_0]=85 # 语文grades[0_1]=92 # 数学grades[0_2]=78 # 英语# 学生1grades[1_0]=88grades[1_1]=95grades[1_2]=82# 打印成绩单subjects=("语文" "数学" "英语")for student in {0..1}; do echo "学生$student 成绩:" for subject in {0..2}; do echo " ${subjects[$subject]}: ${grades[$student_$subject]}" donedonedeclare -A 明确声明关联数组,避免混淆_ 或冒号 :,避免数字歧义(如 11 可能是 1_1 或 11_0)虽然 Linux Shell 本身不支持多维数组,但通过关联数组和索引技巧,我们完全可以模拟多维数组的功能。掌握这一技能,能让你的Shell脚本编程更加强大灵活。无论是处理配置、日志还是小型数据集,这项Shell高级技巧都值得你收入囊中!
动手试试吧!复制代码到你的终端,修改参数,观察输出变化,你会对这个技巧理解更深。
本文由主机测评网于2025-11-25发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/202511557.html