shell 常规数组&关联数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 常规数组&关联数组的主要内容,如果未能解决你的问题,请参考以下文章

shell 脚本-关联数组

shell关联数组

shell脚本中,无法获取“关联数组”(字典)的key,尝试过很多方法,输出都不对,求教

shell之数组和关联数组

Shell - 如何声明关联数组并遍历[重复]

Shell脚本中的关联数组