首页 > 代码库 > 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数组具备这样的特性。
例如:
$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数组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。