bash shell 只支持一维数组,shell中对数组的大小没有限制。数组元素的下标由0开始编号。
定义数组
Shell 定义数组例子:
array_name=(value0 value1 value2 valuen)
或者
array_name=(
value0
value1
value2
valuen
)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
可以不使用连续的下标,而且下标的范围没有限制。
一个例子看懂数组的操作
#!/bin/bash
array_name=('1' '22' '333' '4444')
#打印出所有的值
echo ${array_name[*]}
echo ${array_name[@]}
#默认输出数组的第一个值
echo $array_name
echo ${#array_name}
#读取数组的值
echo $array_name[3]
echo ${array_name[3]}
#输出数组长度
echo ${#array_name[@]}
echo ${#array_name[*]}
echo ${#array_name[1]}
#赋值操作
array_name[0]='888'
echo ${array_name[0]}
补充
1.数组的声明:
1)array[key]=value # array[0]=one,array[1]=two
2)declare -a array # array被当作数组名
3)array=( value1 value2 value3 ... )
4)array=( [1]=one [2]=two [3]=three ... )
5)array="one two three" # echo ${array[0|@|*]},把array变量当作数组来处理,但数组元素只有字符串本身
2.数组的访问:
1)${array[key]} # ${array[1]}
3.数组的删除
1)unset array[1] # 删除数组中第一个元素
2)unset array # 删除整个数组
4.计算数组的长度:
1)${#array}
2)${#array[0]} #同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的区别
5.数组的提取
从尾部开始提取:
array=( [0]=one [1]=two [2]=three [3]=four )
${array[@]:1} # two three four,除掉第一个元素后所有元素,那么${array[@]:0}表示所有元素
${array[@]:0:2} # one two
${array[@]:1:2} # two three
6.子串删除
[root@localhost dev]# echo ${array[@]:0}
one two three four
[root@localhost dev]# echo ${array[@]#t*e} # 左边开始最短的匹配:"t*e",这将匹配到"thre"
one two e four
[root@localhost dev]# echo ${array[@]##t*e} # 左边开始最长的匹配,这将匹配到"three"
[root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )
[root@localhost dev]# echo ${array[@] %o} # 从字符串的结尾开始最短的匹配
one tw three four
[root@localhost dev]# echo ${array[@] %%o} # 从字符串的结尾开始最长的匹配
one tw three four
7.子串替换
[root@localhost dev]# array=( [0]=one [1]=two [2]=three [3]=four )[code]
第一个匹配到的,会被删除
[code][root@localhost dev]# echo ${array[@] /o/m}
mne twm three fmur
所有匹配到的,都会被删除
[root@localhost dev]# echo ${array[@] //o/m}
mne twm three fmur
没有指定替换子串,则删除匹配到的子符
[root@localhost dev]# echo ${array[@] //o/}
ne tw three fur
替换字符串前端子串
[root@localhost dev]# echo ${array[@] /#o/k}
kne two three four
替换字符串后端子串
[root@localhost dev]# echo ${array[@] /%o/k}
one twk three four