Shell编程-10-Shell中的数组
目录
? ? 如果大家有其他语言的基础或经验,就很快能明白数组了。简单来说,数组就某一种相同类型的元素组合,而后通过下标对其进行访问各元素。 数组基础基础语法
array=(value1 value2 value3 ...)
array=([0]=value1 [1]=value2 [2]=value3 ...)
array[0]=value1;array[1]=value2;array[2]=value3
array=($(命令)) 或 array=(`命令`)
数组示例
[[email?protected] Test]# array=(1 3 5) [[email?protected] Test]# echo ${array[*]} 1 3 5
[[email?protected] Test]# array=([0]=1 [1]=3 [2]=5) [[email?protected] Test]# echo ${array[*]} 1 3 5
[[email?protected] Test]# array[0]=1;array[1]=3;array[2]=5 [[email?protected] Test]# echo ${array[*]} 1 3 5
[[email?protected] Test]# array=($(ls)) [[email?protected] Test]# echo ${array[*]} break.sh caseif.sh case.sh compareNum.sh 或 [[email?protected] Test]# array=(`ls`) [[email?protected] Test]# echo ${array[*]} break.sh caseif.sh case.sh compareNum.sh 数组输出? 数组输出通过采用下标索引的形式进行输出,输出数组的格式如下所示: ${ 数组名称 [下标索引] }
[[email?protected] Test]# array=(1 3 5) [[email?protected] Test]# echo ${array[2]} # 输出第3个元素 5 [[email?protected] Test]# echo ${array} # 未指定下标输出第1个元素 1 [[email?protected] Test]# echo ${array[*]} # 使用 * 输出整个数组元素 1 3 5 [[email?protected] Test]# echo ${array[@]} # 使用 @ 输出整个数组元素 1 3 5 数组长度? 输出数长度常用格式如下所示: ${ #数组名称 [*] } 或 ${ #数组名称 [@] } 示例如下所示: [[email?protected] Test]# array=(1 3 5) [[email?protected] Test]# echo ${#array[*]} 3 [[email?protected] Test]# echo ${#array[@]} 3 数组赋值? 可通过数组名[下标索引]对数组进行赋值,其格式如下所示: 数组名[下标索引]=value
示例如下所示: [[email?protected] Test]# array=(1 3 5) [[email?protected] Test]# array[2]=100 # 下标存在,覆盖之前的元素 [[email?protected] Test]# array[5]=888 # 下标不存在,则自动添加一个新的元素值 [[email?protected] Test]# echo ${array[*]} 1 3 100 888 [[email?protected] Test]# echo ${#array[@]} 4 数组删除? 数组本质上还是一种变量,因此通过使用unset进行清除数组元素。其语法格式如下所示: unset 数组名称[下标索引]
示例如下所示: [[email?protected] Test]# array=(1 3 5 7 9) [[email?protected] Test]# echo ${array[@]} 1 3 5 7 9 [[email?protected] Test]# unset array[1] # 清除数组中第2个元素 [[email?protected] Test]# echo ${array[@]} 1 5 7 9 [[email?protected] Test]# unset array # 清除整个数组 [[email?protected] Test]# echo ${array[@]} # 清除数组后,输出为空 数组删除扩展方法[[email?protected] Test]# b=(a b c d e f g h i) [[email?protected] Test]# echo ${b[*]} a b c d e f g h i [[email?protected] Test]# echo ${b[*]#a*} # 从左边开始匹配最短的数组元素并删除 b c d e f g h i [[email?protected] Test]# echo ${b[*]##b*} # 从左边开始匹配最长的数组元素并删除 a c d e f g h i [[email?protected] Test]# echo ${b[*]%i*} # 从右边开始匹配最短的数组元素并删除 a b c d e f g h [[email?protected] Test]# echo ${b[*]%%g*} # 从右边开始匹配最长的数组元素并删除 a b c d e f h i [[email?protected] Test]# echo ${b[*]} # 该删除并不影响原数组的内容 a b c d e f g h i
数组截取与替换? 数组的截取示例如下所示: [[email?protected] Test]# a=($(echo {0..9})) [[email?protected] Test]# echo ${a[*]} 0 1 2 3 4 5 6 7 8 9 [[email?protected] Test]# echo ${a[*]:1:3} # 截取下标索引1~3的元素 1 2 3 [[email?protected] Test]# echo ${a[*]:0:2}# 截取下标索引0~2的元素 0 1 ? 数组的替换格式如下所示: ${ 数组名[*/@]/查找字符/替换字符 }
? 数组的替换示例如下所示: [[email?protected] Test]# echo ${a[*]} 0 1 2 3 4 5 6 7 8 9 [[email?protected] Test]# echo ${a[*]/4/456} # 将4替换为456 0 1 2 3 456 5 6 7 8 9 [[email?protected] Test]# echo ${a[*]} 0 1 2 3 4 5 6 7 8 9 数组示例1、使用循环打印数组元素 [[email?protected] Test]# cat array.sh #!/bin/bash array=($(echo {0..5})) echo "first method" for((i=0;i<${#array[*]};i++)) # 类C风格的for循环 do echo ${i} done echo "second method" for ele in ${array[*]} # for in 循环 do echo ${ele} done [[email?protected] Test]# bash array.sh first method 0 1 2 3 4 5 second method 0 1 2 3 4 5 数组总结
array=(1 2 3) # 静态数组 array=($(ls)) # 动态数组
array[3]=5
unset array[3]
${array[*]}或${array[@]} # 输出数组全部内容 ${array[1]} # 输出数组单个元素
${#array[*]}或${#array[@]} # 输出数组长度
for((i=0;i<${#array[*]};i++)) do echo ${i} done 或 for ele in ${array[*]} do echo ${ele} done 本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |