炫意html5
最早CSS3和HTML5移动技术网站之一

如何在 bash 中使用索引数组

声明一个索引数组

可以使用declare -a隐式声明一个索引数组。请注意,declare -A 选项用于隐式声明关联数组。

$ declare -a 
初始化索引数组

你可以通过多种方式初始化索引数组。由于 bash 数组可以存储整数或字符串,因此可以使用整数数组或字符串数组初始化给定的数组变量。甚至可以混合存储整数和字符串。但是不能创建嵌套数组,Bash 只支持一维数组。

# 初始化一个索引数组,同时显式声明它
# declare -a my_array=(2 4 6 8 10)
# 初始化一个索引数组,同时隐式声明它
# my_array2=(orange apple grape mango)
# 存储整数和字符串的混合键值数组
# my_array3=(100 200 "bob" 500 "dan")


如果要使用默认值0来初始化较大的数组中每个元素,可以使用for 循环。

# 初始化一个大小为 500 的数组,默认值为0
# declare -a my_big_array=($(for i in {1..500}; do echo 0; done))
读取和写入索引数组中的值

要在索引数组中的特定索引位置读取或写入值,使用中括号[]指定索引。

# my_array2=(orange apple grape mango)
# echo ${my_array2[2]}
grape

如果不初始化数组,默认情况下数组中的每个元素都初始化为空值。例如:

[root@localhost ~]# vim my_array.sh
#!/bin/bash
declare -a my_array4
my_array[10]=apple
if [ -z "${my_array[0]}" ]; then
echo "The element at index 0 is empty"
else
echo "The element at index 0 is non-empty: ${my_array[0]}"
fi


执行脚本后输出的结果:

# sh my_array.sh
The element at index 0 is empty

查找数组长度

如果想知道索引数组的长度时,可以使用以下带有 #@ 符号的表达式。

# fruit_array=(orange apple grape mango)
# echo "Array size: ${#fruit_array[@]}"
Array size: 4

数组中添加条目

可以动态地将一个或多个值添加到数组的末尾,而不是在数组的特定位置写入值。使用 += 运算符来做到这一点。

# declare -a color_array=(red yellow)
# color_array+=(blue)
# color_array+=(black white)


另一种递增索引数组的方法如下。

# fruit_array=(orange apple grape mango)
# fruit_array=(${fruit_array[@]} pineappe watermelon)


还可以利用数组长度信息将值附加到数组的末尾。基本上你在数组的最后一个索引处插入一个值。

遍历数组

如果要遍历索引数组,可以使用以下 for 循环。

[root@localhost ~]# vim array_for1.sh
[root@localhost ~]# cat array_for1.sh
#!/bin/bash
declare -a color_array=(red yellow skyblue gray black white)
for color in ${color_array[@]}; do
echo $color
done

以下是执行脚本后的输出信息:

[root@localhost ~]# sh array_for1.sh
red
yellow
skyblue
gray
black
white


或者,可以使用数组索引遍历数组,如下所示:

[root@localhost ~]# vim array_for2.sh
[root@localhost ~]# cat array_for2.sh
#!/bin/bash
declare -a color_array=(red yellow skyblue gray black white)
for i in ${!color_array[@]}; do
echo $i - ${color_array[$i]}
done

以下是输出信息:

[root@localhost ~]# sh array_for2.sh
0 - red
1 - yellow
2 - skyblue
3 - gray
4 - black
5 - white

打印索引数组

如果要打印数组的内容,当然可以遍历数组,然后单独打印每个值。另一种更方便的方法是使用[@],返回数组的内容。

# color_array=(red yellow skyblue gray black white)
# echo ${color_array[@]}
red yellow skyblue gray black white

根据数组索引对数组进行切片

bash 中的索引数组支持不同类型的数组切片,如下所示。

打印整个数组:

${my_array[@]}

数组切片的长度len, 从index开始:

${my_array[@]:index:len}

数组切片的长度len, 从索引0开始:

${my_array[@]::len}

数组切片从输入的索引值开始,到数组的结尾:

${my_array[@]:index}

查看以下 bash 数组切片示例以更好地了解其用法:

[root@localhost ~]# vim array_slice.sh
[root@localhost ~]# cat array_slice.sh
#!/bin/bash
declare -a color_array=(red yellow skyblue gray black white pink purple)
# 获取整个数组
echo "Slice #1: ${color_array[@]}"
# 从索引3开始获取2个值
echo "Slice #2: ${color_array[@]:3:2}"
# 获取数组的前5个值
echo "Slice #3: ${color_array[@]::5}"
# 获取从索引4开始到结束的值
echo "Slice #4: ${color_array[@]:4}"

下面是运行脚本额之后获取的数据值:

[root@localhost ~]# sh array_slice.sh
Slice #1: red yellow skyblue gray black white pink purple
Slice #2: gray black
Slice #3: red yellow skyblue gray black
Slice #4: black white pink purple

本文原创地址:https://www.linuxprobe.com/bash-index-array.html编辑:逄增宝,审核员:逄增宝

为您推荐一些与本文相关的文章:

  • Linux Sudo 史上最大bug
  • 《神经网络与机器学习 》pdf电子书免费下载
  • Ubuntu 放弃了战斗向微软投降
  • Google推出大型混和云平台Anthos
  • 使用Python实现斐波那契数列
  • Windows 10各版本市场占比统计
  • 黑莓将与Bullitt进行手机安全合作
  • 教你如何在 Ubuntu 中安装 Oracle Java 13
  • 捷讯:白浩然8月23日北京顺利通过RHCE认证。
  • 7nm工艺+Zen2架构!AMD 64核心霸气现世

炫意HTML5 » 如何在 bash 中使用索引数组

Java基础教程Android基础教程