首页 > 代码库 > Linux下shell数组

Linux下shell数组

shell当中的数组和其他编程语言的意义是一样的,考虑到shell是一个弱类型的脚本语言,可以在command lime当中直接去定义和使用
例如:
$a[1]="Monday"
$echo ${a[1]}
Monday
$
注意这里用花括号,如果写成echo $a[1] 的话,在执行前shell会进行扩展,结果把a[1]就扩展为"a[1]"的字符串,然后和$结合,就直接输出$后面的字符串,即"a[1]",所以在对数组元素操作的时候要用花括号,以免不必要的出错。


数组元素的赋值
1 逐个赋值
  就直接把指定的数组元素给定值就行了,如a[2]="Tuesday"

2 批量赋值
  形式和其他的差不错,格式是 name=(value1 value2 value3 ...)
例如number=("one" "two" "three" "four")
当然你可以指定下标 number=([0]="zero" [1]="one" [2]="two" [3]="three")
例如:
$number=("one" "two" "three")
$echo ${number[0]}
one
$number1=([0]="zero" [1]="one" [2]="two" [3]="three")
$echo ${number1[0]}
zero
$
从这里可以知道shell当中数组的下标也是从0开始的

数组的操作
1  大小操作
  数组长度的大小可以通过参数扩展了解数组的大小,以及数组元素的大小
针对上面的例子可以有:
$echo ${#number[@]}     //输出数组的大小,这个大小是当前数组实际被利用的有效个数
3
$echo ${#number[2]}     //输出第三个即three的长度
5
$

2 查找数组的下标,这个特征在之前的语言学习当中并没有接触到,它是根据检查数组当中某一位是否有值,如果有,就把数组所在的下标输出,这可以在我们查找数组当中元素有很大的帮助,
格式是:${!array[@]}    

$number=([1]="Mon" [5]="Fri")
$for i in "${!number[@]}"; do echo $i; done
1
5


3 在数组末尾追加数组元素,和其他接触的编程语言不同,其他语言一旦指定数组长度就不能更改了,而在shell当中它拓展了这类特性,使其能够根据需要动态的增加数组的长度,但是在前面了解当中可以看出在操作数组的中期你可能很难知道数组的最大长度了,shell提供一个"+="操作符来解决
$number=(1 2 3)
$echo ${number[@]}
1 2 3
$number+=(4 5 6)
$echo ${number[@]}
1 2 3 4 5 6
$


4 unset array 就可以删除数组,与之相反的就是定义一个数组,declare -a array
 同样也可以删除一个数组当中的元素
例如:
$number=(1 2 3)
$unset ‘number[2]‘   //这里指定待删除数组元素,记住这里应该用单引号,以免shell进行扩展了。
$echo "${number[@]}"
1 2
$

5数组名其实和数组当中的第一个元素的地址是一样的,所以你对数组名进行有关的赋值,其实归根结底还是对array[0]的赋值。但是如果unset array操作,则整个数组都没有了,


6关联数组,就是数组下标可以是字符串,这种类型的数组表达的意思是很明确的,在使用是得用declare -A array 操作是array数组具备这样的特性。

Linux下shell数组