標籤:shell 數組 字元下標 關聯陣列
在日常編寫shell的過程中,數組是一個非常常用到的內容。我們這裡簡要介紹兩種數組的使用方式。一種常規數組,一個中關聯陣列。差異就是常規數組,只能用整數作為下標來進行資料的存取。而關聯陣列能夠使用字元作為小標來進行儲存。
常規數組
1) 初始化
數組中的多個變數用括弧來括起來,變數間用空格來間隔開來。
[email protected]:~/test_shell#./demo1.sh
1 2 3 4 5
1 2 3 4
[email protected]:~/test_shell# moredemo1.sh
#!/bin/bash
a=( 1 2 3 4 5 )
b=(1
2
3
4
)
#Print the arry
echo ${a[*]}
echo ${b[*]}
將文本的內容以行為單位存到數組中
[email protected]:~/test_shell# vim list
[email protected]:~/test_shell# a=(`catlist`)
[email protected]:~/test_shell# echo${a[*]}
line2 line3 line4 line5 line5 line6
[email protected]:~/test_shell# echo${a[1]}
line3
[email protected]:~/test_shell# cat list
line2
line3
line4
line5
line5
line6
這裡再多提一個就是迴圈遍曆文本中的每一個行
[email protected]:~/test_shell# whileread line;do echo $line ;done < list
line2
line3
line4
line5
line5
line6
[email protected]:~/test_shell#./demo1.sh
do something: line2
do something: line3
do something: line4
do something: line5
do something: line5
do something: line6
do something:
[email protected]:~/test_shell# moredemo1.sh
#!/bin/bash
cat list | while read line;do
echo "do something: $line"
done
2)資料存取
擷取某個指定的變數
[email protected]:~/test_shell# echo${a[1]}
line3
[email protected]:~/test_shell# echo${a[2]}
line4
擷取變數所有值
[email protected]:~/test_shell# echo${a[@]}
line2 line3 line4 line5 line5 line6
[email protected]:~/test_shell# echo${a[*]}
line2 line3 line4 line5 line5 line6
[email protected]:~/test_shell#
倒序的擷取陣列變數
[email protected]:~/test_shell# echo${a[-2]}
line5
[email protected]:~/test_shell# echo${a[-4]}
line4
擷取數組的長度
[email protected]:~/test_shell# echo${#a[*]}
6
[email protected]:~/test_shell# echo${#a[@]}
6
2) 賦值&清楚某個小標值
[email protected]:~/test_shell#echo ${#a[@]}
6
[email protected]:~/test_shell#echo ${a[*]}
line2line3 line4 line5 line5 line6
[email protected]:~/test_shell#unset a[3]
[email protected]:~/test_shell#echo ${a[*]}
line2line3 line4 line5 line6
[email protected]:~/test_shell#echo ${#a[@]}
5
3) 分區存取
${數組名[@或*]:起始位置:長度}切片原先數組,返回是字串
[email protected]:~/test_shell#echo ${a[@]:1:1}
line3
[email protected]:~/test_shell#echo ${a[@]:1:2}
line3 line4
4) 替換內容
[email protected]:~/test_shell#echo ${a[*]}
line2line3 line4 line5 line6
[email protected]:~/test_shell#echo ${a[*]/2/test}
linetestline3 line4 line5 line6
[email protected]:~/test_shell#echo ${a[*]/2/ test}
line test line3 line4 line5 line6
[email protected]:~/test_shell#b=(${a[*]/2/ test})
[email protected]:~/test_shell#echo $b
line
[email protected]:~/test_shell#echo ${b[@]}
line testline3 line4 line5 line6
[email protected]:~/test_shell#echo ${a[@]}
line2 line3 line4 line5 line6
關聯陣列
declare參考連結:
http://blog.csdn.net/tutuboke/article/details/50440598
關聯陣列和常規數組的差異就是,關聯陣列能夠使用字串來作為。其他的操作方法和常規數組是一樣的,能分區,能消除。
初始化
[email protected]:~#declare -A aa_array
[email protected]:~#aa_array[‘index1‘]=‘value1‘
[email protected]:~#aa_array[‘index2‘]=‘value2‘
[email protected]:~#aa_array[‘index3‘]=‘value3‘
[email protected]:~#echo ${aa_array[@]}
value1 value2 value3
另一種賦值方式
[email protected]:~#declare -A a_array=( [‘i1‘]=‘v1‘[‘i2‘]=‘v2‘ [‘i3‘]=‘v3‘ )
[email protected]:~#echo ${a_array[@]}
v3 v2 v1
本文出自 “從頭開始” 部落格,請務必保留此出處http://atong.blog.51cto.com/2393905/1912203
shell 常規數組&關聯陣列