shell 常規數組&關聯陣列

來源:互聯網
上載者:User

標籤: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 常規數組&關聯陣列

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.