教程

Shell 支持数组处理。数组是包含多个值的变量,在 Shell 中,任何变量都可以用作数组。数组的大小没有上限,且成员变量无需连续索引或连续分配。

数组索引从零开始:第一个元素的编号为 0。

基本语法结构:

# 定义数组
# array=(value1 value2 ... valueN)
array=(23 45 34 1 2 3)

# 引用特定值(例如:引用第 3 个值,索引为 2)
echo ${array[2]}

# 引用所有数组值
echo ${array[@]}

# 获取数组元素个数
echo ${#array[@]}

练习

在本练习中,您需要比较三个数组列表,并找出所有三个数组中的公共元素。

给定数组:

  • a=(3 5 8 10 6)
  • b=(6 5 4 12)
  • c=(14 7 5 7)

预期结果是它们的共同元素:5

练习代码框架

#!/bin/bash
# 在此处输入您的数组比较代码

预期输出

5

参考解决方案

#!/bin/bash
# 在此处输入您的数组比较代码

# 初始化数组 a, b, c
a=(3 5 8 10 6) 
b=(6 5 4 12) 
c=(14 7 5 7)

# 比较前两个数组 a 和 b,将匹配结果存入数组 z
for x in "${a[@]}"; do 
  for y in "${b[@]}"; do 
    if [ "$x" = "$y" ]; then 
      # 将匹配结果赋值给新数组 z
      z[${#z[@]}]=$x
    fi
  done 
done

# 将第三个数组 c 与新数组 z 进行比较
for i in "${c[@]}"; do 
  for k in "${z[@]}"; do
    if [ "$i" = "$k" ]; then
      # 将匹配结果赋值给新数组 j
      j[${#j[@]}]=$i
    fi
  done 
done 

# 打印数组 j 的内容
echo ${j[@]}

系列教程导航