Shell 数组

Shell中数据类型不多,比如说字符串,数字类型,数组。数组是其中比较重要的一种,同时Shell中的数组不像JAVA/C,只能是一维数组,没有二维数组;数组元素大小无约束,也无需先定义数组的元素个数;但其索引则像JAVA/C/Python,从0开始,下面是我学习过程的一些总结。

定义:

  shell的定义和python相似格式如下

# 变量名=(值 值 值)   值之间用空格或换行隔开
arr=(1 2 3 4)

# 逐个赋值
arr[o]=1
arr[1]=2
arr[2]=3
arr[3]=4

arr=([o]=1 [1]=2 arr[2]=3 arr[3]=4)

数组的基本操作

获取数组

  • 读取某个下标的值:${数组名[下标]}

  • 获取数组长度:${#数组名[@/*]} 即${#数组名[*]}或${#数组名[@]}

  • 求元素长度: ${#数组名[index]}

    ​ expr length ${数组名[index]}

    ​ ${数组名[index]} | wc -L

添加数组

  • 直接添加 数组[index]=值 index大于数组长度则在最后添加
  • 利用旧数组创建新的 newArrays=(${old[*]} 值)

修改数组

  • 直接修改 数组[index]=值

删除数组

  • 删除元素 unset 数组[index]
  • 删除数组 unset 数组

数组的截取

   和字符串相似,可以和字符串的方法对比着看。

假设有变量

arr=(1 2 3 4 5 6 )
var=(book food)

1. # 号截取,从左到右进行最短匹配查找。

echo ${var[@]#b*o}

其中 var 是变量名,# 号是运算符,b*o 表示从左边开始查找

即删除 bo

结果是 :ok food

2. ## 号截取,从左到右进行最长匹配查找

echo ${var##b*o} 

即删除boo

结果是 k food

3. %号截取,从右到左进行最短匹配查找

echo ${var%o*d}

%/* 表示从右边开始,删除第一个 od

结果是:book fo

4. %% 号截取,删从右到左进行最长匹配查找

echo ${var%%o*d}

%% 表示从右边开始,删除最后(最右边边)一个 o0d号

结果是:book f

5. 从左边第几个字符开始,及字符的个数

echo ${arr[@]:0:2}
echo ${arr[@]::2} #两个一样

其中的 0 表示左边第一个字符开始,2 表示字符的总个数。

结果是:1 2

6. 从左边第几个字符开始,一直到结束。

echo ${arr[@]:1}

其中的 1表示左边第2个字符开始,一直到结束。

结果是 :3 4

7. 从右边第几个字符开始,及字符的个数

echo ${var[@]:(-2):2}

其中的 -2表示右边算起第2个字符开始,2表示字符的个数。

结果是:3 4

8.元素切片

names=(Jerry Alice David Wendy)
echo $(names[0]:0) # 从0开始取所有   Jerry
echo $(names[0]:1:2) # 从0开始取2个 er
echo $(names[0]:6) #超出显示空行

数组替换

  • ${array[@]/x/y} 最小匹配替换,每个元素只替换一次
  • ${array[@]//x/y} 最大匹配替换,每个元素可替换多次
  • ${array[@]/x/} 最小匹配删除,只删除一个符合规定的元素
  • ${array[@]//x/} 最大匹配删除,可删除多个符合规定的元素

这个和前面相似就不举例子了。

原文地址:https://www.cnblogs.com/yangliguo/p/8006564.html