数组
概述
Array(数组) 也是一种变量,数组中可以存放多个值,每个值都称为该数组的元素。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
与大部分编程语言类似,数组元素的下标由 0 开始。
Shell 数组用 ()
小括号来表示,元素用空白符分割
定义数组的方式:ArrayName=(Value1 ... ValueN)
数组的赋值
#!/bin/bash
my_array=(A B "C" D)
# 我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
数组的引用
通过数组的下标来获取数组的值,数组中的第一位下标是 0,第二位下标是 2……以此类推
引用数组元素值的一般格式是:${array_name[index]} # index 是下标的数字
实例
#!/bin/bash
my_array=(A B "C" D)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
执行脚本,输出结果如下所示:
$ chmod +x test.sh
$ ./test.sh
第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D
引用数组中指定的元素
参考 变量与系统环境配置详解 中变量的高级技巧一节,可以通过 ${ } 来截取数组中的元素
# 该示例通过 ${VARIABLE:START:LENGTH} 方式,将数组左边起第一个元素开始,向右截取到末尾的所有元素,并 echo 出来。
my_arrays=(a b c d)
echo ${my_arrays[@]:1}
b c d
引用数组中的所有元素
使用 @
或 *
可以获取数组中的所有元素,例如:
my_arrays=(A B C D)
echo "数组的元素为: ${my_arrays[*]}"
数组的元素为: A B C D
echo "数组的元素为: ${my_arrays[@]}"
数组的元素为: A B C D
Note:
-
# 当变量加上""
会当成一串字符串处理.@
# 变量加上""
依然当做数组处理.- 在没有加上 “” 的情况下 效果是等效的.
效果如下:
~]# cat array.sh
#!/bin/bash
array=("li chen hao" "zhang_na")
for i in ${array[@]}; do
echo "@符号无双引号:"${i}
done
echo ------------
for i in "${array[@]}"; do
echo "@符号有双引号:"${i}
done
echo ------------
for i in ${array[*]}; do
echo "*符号无双引号:"${i}
done
echo ------------
for i in "${array[*]}"; do
echo "*符号有双引号:"${i}
done
~]# bash array.sh
@符号无双引号:li
@符号无双引号:chen
@符号无双引号:hao
@符号无双引号:zhang_na
------------
@符号有双引号:li chen hao
@符号有双引号:zhang_na
------------
*符号无双引号:li
*符号无双引号:chen
*符号无双引号:hao
*符号无双引号:zhang_na
------------
*符号有双引号:li chen hao zhang_na
获取数组的长度
数组的长度分两种情况,一种是数组元素的个数,另一种事数组元素的所有索引号
my_arrays=(A B C D)
echo "数组元素个数为: ${#my_arrays[*]}"
数组元素个数为: 4
echo "数组元素个数为: ${#my_arrays[@]}"
数组元素个数为: 4
echo "数组元素的索引号为: ${!my_arrays[@]}"
数组元素的索引号为: 0 1 2 3
向数组中添加元素
# 在数组末尾添加元素
~]# abc=(a b c)
~]# echo ${abc[@]}
a b c
~]# abc+=(d)
~]# echo ${abc[@]}
a b c d
# 向指定 index 位置添加元素
~]# arrays=(a b c d)
~]# arrays[5]=f
~]# echo ${arrays[@]}
a b c d f
~]# echo ${!arrays[@]}
0 1 2 3 5
删除数组中的元素
~]# arrays=(a b c d)
~]# echo $arrays
a b c d
~]# unset arrays[2]
~]# echo ${arrays[@]}
a b d
~]# echo ${!arrays[@]}
0 1 3
~]# arrays+=(c)
~]# echo ${!arrays[@]}
0 1 3 4
~]# echo ${arrays[@]}
a b d c
~]# arrays[2]=c
~]# echo ${arrays[@]}
Note:
- 某个元素删除后,其余元素的 index 号不变
- 如果对删除元素的数组添加新元素,则新元素的 index 号向后递增
数组的应用实例
对数组中的元素排序
# 原始数组:B=(20 9 01 5 11 4 6 14 12 14 0808)
b=($(printf '%s\n' "${B[@]}"|sort -n))
# 排序后的数组:b=(01 4 5 6 9 11 12 14 14 20 0808)
数组的遍历,在 for 循环中的应用
#!/bin/bash
#
b=(01 4 5 06 9 11 12 14 14 20 0808)
let max=${#b[@]}-1
for Subscript in `seq 0 ${max}`;do
echo ${b[${Subscript}]}
done
可以遍历数组并输出数组中每一个值
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.