bash数组
bash中的数组仅支持一维数组,数组定义好后数组的长度也可以动态地改变。
bash中的数组有两种,一种是常见的索引数组,另一种是bash4.0后支持的关联数组。
先简单谈一下关联数组:
declare -A array #申明关联数组,如果要把array当做关联数组使用,这个必须申明
array[hello]=red;array[hi]=yellow;array[honey]=green.......
[baby@beibei ~]$ declare -A array [baby@beibei ~]$ array[hello]=red [baby@beibei ~]$ array[hi]=yellow [baby@beibei ~]$ echo ${array[hello]} red [baby@beibei ~]$ echo ${array[hi]} yellow
关联数组用的不多,下面介绍我们常用的
申明数组
declare -a array
数组的赋值
1)一次对一个元素赋值:
array[0]=red
array[1]=yellow
......
2)一次对所有元素进行赋值
array=(red yellow green blue)
3)按索引赋值
array=([2]=green [1]=red [3]=yellow [0]=blue)
4)命令替换
logs=(`ls /var/log*.log`)或者logs=(/var/log/*.log)
colors=(`cat color.text`) 直接从文件中读取,每一行为数组的一个元素
5)用户输入
read -a array
[baby@beibei tmp]$ read -a color blue red black white [baby@beibei tmp]$ echo ${color[@]} #输出所有元素 blue red black white
数组的访问
array[index] 例:echo ${color[2]}
获取所有数组
1)${array[@]}: 每个参数是一个独立的串
2)${array[*]}: 所有参数是一个串
下面是一个脚本的代码:
#!/bin/bash declare -a color color=(red blue yellow black white green) for i in "${color[@]}"; do echo $i done for i in "${color[*]}"; do echo $i done
以下是执行结果:
[baby@beibei bashtest]$ ./arraytest.sh red blue yellow black white green red blue yellow black white green
如此可以看出${array[@]}与${array[*]}的区别,一个是一整个字符串,一个是每个单独的元素是一个字符串。当然如果把这里的引号去掉"${color[*]}"。for循环也可以正确输出其中的每一个元素。
数组的长度
1)${#ARRAY[*]}
2)${#ARRAY[@]}
[baby@beibei tmp]$ array=(red yellow green blue) [baby@beibei tmp]$ echo ${#array[*]} 4
[baby@beibei tmp]$ array=([2]=green [5]=yellow [0]=blue) [baby@beibei tmp]$ echo ${#array[@]} 3 #没有定义的下标数组不会占用数组中元素的个数
从数组中挑选部分元素
${ARRAY[@]:offset:number}
offset: 偏移的元素个数
number: 取出的元素的个数
[baby@beibei tmp]$ array=(red yellow green blue) [baby@beibei tmp]$ echo ${array[@]:1:2} yellow green
取出偏移量后的所有元素
${ARRAY[@]:offset}
[baby@beibei tmp]$ echo ${color[@]:1} yellow green blue
连接两个数组
array=(${array1[@]} ${array2[@]})
[baby@beibei tmp]$ number=(3 5 1 9 7) [baby@beibei tmp]$ color=(blue grey white red) [baby@beibei tmp]$ array=(${number[@]} ${color[@]}) [baby@beibei tmp]$ echo ${array[@]} 3 5 1 9 7 blue grey white red
数组元素的删除与替换
array=(${array[@]/pattern1/string})
pattern可以是一个字符串,也可以是通配符,被匹配到的字符将被替换成string,若string不写,则匹配到的元素将被删除
元素删除:
[baby@beibei tmp]$ color=(blue1 blue2 red green) [baby@beibei tmp]$ echo ${color[@]} blue1 blue2 red green [baby@beibei tmp]$ color=(${color[@]/blue*/}) [baby@beibei tmp]$ echo ${color[@]} red green
元素替换:
[baby@beibei tmp]$ color=(blue1 blue2 red green) [baby@beibei tmp]$ color=(${color[@]/blue*/white}) [baby@beibei tmp]$ echo ${color[@]} white white red green
当然元素的删除也可以这样:
unset ARRAY[index]
[baby@beibei tmp]$ color=(blue1 blue2 red green) [baby@beibei tmp]$ unset color[1] [baby@beibei tmp]$ echo ${color[@]} blue1 red green
遍历数组
#!/bin/bash color=(red green yellow white black) for i in ${color[@]}; do echo $i done exit 0
color=(red green yellow white black) for((i=0;i<${#color[@]};i++)); do echo ${color[$i]} done exit 0
.......
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。