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

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛白南歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值