1939

10 分钟

#Bash 的数组

数组(Array)是在计算机编程中,用于存储一系列连续数据的集合。每个元素通过一个唯一的数值索引进行访问,Bash 数组的索引从零开始。

Bash 中定义数组的语法为:

数组变量名=(值1 值2 值3 ... 值n)
  • 使用括号包裹
  • 通过空白字符(空格、换行等)分隔

例如:

NAMES=(Tom Jerry Spike) SCORES=( 90 80 65 ) DEVICES=( /dev/* ) # 使用通配符获取文件列表

#读取单个数组元素

读取数组元素的语法为:

${数组变量名[索引]}
  • 索引从零开始。

示例:

NAMES=(Tom Jerry Spike) # 读取数组元素 echo ${NAMES[0]} echo ${NAMES[1]} echo ${NAMES[2]}

运行结果:

Tom Jerry Spike

#读取全部元素

直接通过 $数组变量名 读取数组时,实际上读取的是索引为 0 的元素。

如果要读取数组的所有元素,则需要使用 @* 作为索引。

例如:

NAMES=("Hakurei Reimu" "Kirisame Marisa") # $NAMES 等价于 ${NAMES[0]} echo '$NAMES:' $NAMES # 读取所有元素 echo '${NAMES[@]}:' "${NAMES[@]}" # for...in 循环遍历数组 for name in "${NAMES[@]}" do echo loop: $name done

运行结果:

$NAMES: Hakurei Reimu ${NAMES[@]}: Hakurei Reimu Kirisame Marisa loop: Hakurei Reimu loop: Kirisame Marisa

注意在 for...in 循环遍历数组时需要使用双引号("${NAMES[@]}"),否则含有空白字符的单个元素会被拆分为多个。

例如:

NAMES=("Hakurei Reimu" "Kirisame Marisa") # for...in 循环遍历数组时使用双引号 for name in "${NAMES[@]}" do echo loop1: $name done # for...in 循环遍历数组时不使用双引号 for name in ${NAMES[@]} do echo loop2: $name done

运行结果:

loop1: Hakurei Reimu loop1: Kirisame Marisa loop2: Hakurei loop2: Reimu loop2: Kirisame loop2: Marisa

#获取数组的长度

获取数组长度的语法为:

${#数组变量名[@]} # 或 ${#数组变量名[*]}

例如:

NAMES=(Tom Jerry Spike) echo ${#NAMES[@]}

运行结果:

3

#修改数组元素

修改数组元素的语法为:

数组变量名[索引]=值
  • 索引从零开始。

示例:

NAMES=(Tom Jerry Spike) # 修改数组元素 NAMES[0]=Suika NAMES[1]=Marisa # 添加元素 NAMES[5]=Fred # 读取数组长度 echo ${#NAMES[@]} # 读取所有元素 echo ${NAMES[@]}

运行结果:

4 Suika Marisa Spike Fred

示例中修改了索引为 0 和 1 的元素的值,然后添加了索引为 5 的元素。

Bash 数组可以是稀疏数组(索引不连续),索引 3 和 4 被跳过了。

创建于 2025/9/17

更新于 2025/9/17