SHELL-数组(Linux)

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

1 定义数组

bash中数组的定义有很多方式:

  • 数组中各元素以空格隔开。
  • 所有的元素包括在小括号内。
  • 如果字符串中包含了多个空格,那么可以将该字符串转换为数组,具体如下面代码中的方式五。
  • SHELL中没有限定数组的大小。
  • 定义数组元素时,元素的索引可以不按顺序定义。两个索引中间元素如果没有定义,则默认为空。

具体如下代码所示:

#!/bin/bash
#定义数组
#方式一
array_cmd=(
cd
cmd
dir
ls
)
echo ${array_cmd[*]}

#方式二
array_cmd2=(rm rmdir tar zip)
echo ${array_cmd2[*]}

#方式三
names=([0]=Tom [1]=Jim [2]=Li [8]=Wang)
echo ${names[*]}
echo ${names[3]}
echo ${names[8]}

#方式四
names2[0]=Hua
names2[1]=Ying
names2[2]=Guang
names2[7]=Ri
echo ${names2[*]}
echo ${names2[3]}
echo ${names2[7]}

#方式五
str="liushu yangshu fengshu hualiu"
names3=($str)
echo ${names3[1]}
echo ${names3[*]}

运行结果如下:


cd cmd dir ls
rm rmdir tar zip
Tom Jim Li Wang

Wang
Hua Ying Guang Ri

Ri
yangshu
liushu yangshu fengshu hualiu

2 数组长度

SHELL中的数组,可以用   数组名[*]  或是  数组名[@]来代表整个数组。如下:

#!/bin/bash

name=(wangsan liwu zhangsi qiba jiushi)
echo ${name[*]}
echo ${name[@]}
#打印整个数组的长度
echo ${#name[*]}
echo ${#name[@]}

#打印数组中某个元素的长度
#打印第二个元素的长度
echo ${#name[1]}
echo `expr length ${name[1]}`
#打印第三个元素的长度
echo ${#name[2]}

运行结果如下:

wangsan liwu zhangsi qiba jiushi
wangsan liwu zhangsi qiba jiushi
5
5
4
4
7

3 数组遍历

可以通过索引的方式去打印输出数组元素,也可以不用索引的方式。数组的下标从0开始,具体代码如下:

#!/bin/bash

name=(wangsan liwu zhangsi qiba jiushi)

#按照索引的方式输出
#for循环的条件必须用两个括号括起来,否则运行报错
for((i=0;i<${#name[@]};i++))
do
   echo ${name[i]}
done

echo "----------------------"
#不按照索引的方式输出
for i in ${name[*]}
do
   echo ${i}
done

运行结果如下:

wangsan
liwu
zhangsi
qiba
jiushi
----------------------
wangsan
liwu
zhangsi
qiba
jiushi

4 数组元素的添加

可以直接通过下标索引更改某个元素的值,也可以通过下标索引给数组添加元素,同样可以将数组进行拼接。如下:

#!/bin/bash

nums=(1 2 3)
echo ${nums[*]}
#通过索引直接更改元素的值
nums[0]=0
echo ${nums[*]}

#通过索引增加元素
nums[3]=10
echo ${nums[*]}

#通过数组和元素的拼接
new=(${nums[*]} 11)
echo ${new[*]}

运行结果:

1 2 3
0 2 3
0 2 3 10
0 2 3 10 11

5 数组切片

数组切片类似于字符串的切片,输出指定的数组。

下标从0开始,如果是负数,则倒数开始计算位置。如下:

#!/bin/bash

nums=(00 11 22 33 44 55)
echo "数组名默认取第一个元素,下标为0"
echo ${nums}

echo "取数组的第一个元素,通过下标获取"
echo ${nums[0]}

echo "输出所有的数组元素"
echo ${nums[*]}

echo "输出下标2后面的所有元素"
echo ${nums[*]:2}

echo "下标从2开始,取2个元素"
echo ${nums[*]:2:2}

echo "下标从0开始,取3个元素"
echo ${nums[*]::3}

echo "从倒数第二个元素开始,取3个元素"
echo ${nums[*]:-2:3}

运行结果:

数组名默认取第一个元素,下标为000
00
取数组的第一个元素,通过下标获取
00
输出所有的数组元素
00 11 22 33 44 55
输出下标2后面的所有元素
22 33 44 55
下标从2开始,取2个元素
22 33
下标从0开始,取3个元素
00 11 22
从倒数第二个元素开始,取3个元素
00 11 22 33 44 55

 

你可能感兴趣的:(SHELL)