Linux下shell数组
2014-09-11 10:20
183 查看
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 Bash Shell学习(十六):数组
- linux_shell_数组建立及使用技巧
- Linux 命令详解(十)Shell脚本的数组详解
- Linux基础 - shell数组
- linux中shell脚本数组介绍
- 演示了如何在Linux的Shell中使用数组.
- 【Linux】中的shell脚本语法篇之函数和数组
- Linux命令行与shell脚本(14)--在函数中使用数组
- linux学习第六十六篇:shell中的函数,shell中的数组,告警系统需求分析
- Linux下Shell中数组的使用
- linux中shell数组的使用和建立
- linux的简单shell脚本包括数组和条件判断
- linux操作shell脚本定义数组赋值取值
- Linux在shell中自动生成1到100的数组方法(两种方法)
- linux bash shell实现对数组快速排序(升序)
- Linux, Mac下Shell 数组 Array 的修理工
- linux之基础shell脚本编程3 函数数组
- 【Linux学习】之 Shell(变量、数组)
- Linux之Shell学习(六)Shell数组、Shell字符串
- 【Linux】Shell - 数组操作