Bash编程009——数组

Bash编程009——数组

9.1 数组定义

所谓数组,是指将具有相同类型的若干变量按照顺序组织起来的数据类型。

在之前的变量一节,提到过可以使用declare或者typeset定义一个变量为数组。或者可以直接指定数组中的元素值来定义一个新的数组变量。

bash中的数组下标从零开始。

# 定义arr为索引数组
declare -a arr
# 定义arr为关联数组
declare -A arr
# 为arr[0]赋值
arr[0]=10
# 为arr[hello]赋值
arr[hello]="world"

使用数组中的值,格式:${myarray[index]},$myarray相当于${myarray[0]},即数组的第一个元素。

以元素值集合的形式为数组赋值,格式:

arr=( var0 var1 var2 ... varn )
# 示例
arr=(1 2 3 4 5 6)
# 输出所有元素,两种方式都可以,但是有区别
echo "${arr[@]}"
echo "${arr[*]}"

通过键值对的形式为数组赋值

arr=([0]=var1 [1]=var2 ... [n]=varn)
# 示例
arr=([0]=100 [1]=200  [2]=300)
echo ${arr[*]}
# 结果
100 200 300

注:若采用这种形式为关联数组赋值,需要先用declare定义

declare -A myArray
myArray=([Unicom]=10010 [TELECOM]=10000 [Mobile]=10086)
echo ${myArray[*]}

9.2 访问数组

通过${#array[@]}或${#array[*]}来获取一个数组的长度

array=(0 1 2 3 4 5)
echo ${#array[@]}
# 输出:6
echo ${#array[*]}
# 输出:6

简单的遍历索引数组

array=(0 1 2 3 4 5)

for ((i=0;i<${#array[*]};i++))
do
    echo ${array[$i]}
done
# 输出:
0
1
2
3
4
5
array=(0 1 2 3 4 5)
for i in ${array[*]}
do
    echo $i
done
# 输出:
0
1
2
3
4
5

遍历关联数组:通过${!myarray[@]} 注:不能用${!myarray[*]}

declare -A myarray
myarray[a]=0
myarray[b]=1
myarray[c]=2
for i in "${!myarray[@]}"
do
  echo "key  : $i"
  echo "value: ${myarray[$i]}"
done
# 输出:
key  : a
value: 0
key  : b
value: 1
key  : c
value: 2

在数组末尾追加元素

declare -a array
array=(0 1 2 3 4 5 6)

for i in {7..10}
do
        array[${#array[*]}]=$i
done
echo ${array[@]}
# 输出:0 1 2 3 4 5 6 7 8 9 10

获取部分数组元素

可以通过切片获取部分数组元素,格式:

${array[@|*]:start:length}

示例:

# 删除原有的数组
unset nums
nums=(0 1 2 3 4 5 6 7)
newnums=${nums[@]:1:4}
echo ${newnums[@]}
# 输出:1 2 3 4

9.3 替换删除数组元素

数组元素替换,可以将某个数组元素的部分内容用其他字符来替代

基本语法:

${array[@|*]/pattern/replacement}

示例:

unset array
array=("test1.txt" "hello.txt" "word.txt")
echo "${array[@]/.txt/.c}"
# 输出:test1.c hello.c word.c

使用unset可以删除数组中的某个元素或者整个数组

# 删除数组中的某个值
unset array[n]
# 删除整个数组
unset array
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值