#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 被跳过了。