引言
在 Linux 平台上工作, 我们经常需要使用 shell 来编写一些有用, 有意义的脚本程序. 有时, 会经常使用 shell 数组. 那么, shell 中的数组是怎么表现的呢, 又是怎么定义的呢? 接下来逐一的进行讲解, shell 中的数组.
数组的定义
何为数组? 学过计算机编程语言的同学都知道, 数组的特性就是一组数据类型相同的集合 (不包括有一些编程语言提出来的关联数组的概念). 那么 shell 中数组是怎么定义的呢, 我们来看两种数据类型: 一是数值类型, 二是字符串类型; 虽然 shell 本身是弱类型的, 但也可以这么区分.
数值类型的数组: 一对括号表示数组, 数组中元素之间使用 "空格" 来隔开.
举个列子:
arr_number=(1 2 3 4 5);
字符串类型数组: 同样, 使用一对括号表示数组, 其中数组中的元素使用双引号或者单引号包含, 同样使用 "空格" 来隔开.
arr_string=("abc" "edf" "sss"); 或者 arr_string=('abc' 'edf' 'sss');
数组的操作
我们使用数值类型数组 arr_number=(1 2 3 4 5) 做为源数组进行相关的讲解: 获取数组长度, 读取某个下标的值, 对某个下标赋值, 删除, 分配和替换以及遍历. 提一个知识点, 我们在 shell 里面想获取某个变量的值, 使用 $ 符开头, 如:$a 或者 ${a} 即可.
获取数组长度
arr_length=${#arr_number[*]} 或 ${#arr_number[@]} 均可, 即形式:${# 数组名 [@/*]} 可得到数组的长度.
读取某个下标的值
arr_index2=${arr_number[2]}, 即形式:${数组名 [下标]}
对某个下标赋值
这里需要提出两个问题:
第一个问题是如果该下标元素已经存在, 会怎么样?
答: 会修改该下标的值为新的指定值.
例如: arr_number[2]=100, 数组被修改为 (1 2 100 4 5)
第二个问题是如果指定的下标已经超过当前数组的大小, 如上述的 arr_number 的大小为 5, 指定下标为 10 或者 11 或者大于 5 的任意值会如何?
答: 新赋的值被追加到数组的尾部.
例如: arr_number[13]=13, 数组被修改为 (1 2 100 4 5 13)
删除操作
清除某个元素: unset arr_number[1], 这里清除下标为 1 的数组;
清空整个数组: unset arr_number;
分片访问
分片访问形式为:${数组名 [@或 *]: 开始下标: 结束下标}, 注意, 不包括结束下标元素的值.
例如:${arr_number[@]:1:4}, 这里分片访问从下标为 1 开始, 元素个数为 4.
模式替换
形式为:${数组名 [@或 *]/ 模式 / 新值}
例如:${arr_number[@]/2/98}
数组的遍历
数组遍历我们使用 for 语句来演示:
- for v in ${arr_number[@]}; do
- echo $v;
- done
结束语
通过上述, 我们讲解了 shell 中数组的定义, 已经对数组的相关操作有获取长度, 读取某下标值, 对某个下标赋值, 删除, 分配和替换以及遍历. 通过上述的讲解, 希望能够给与读者在 Linux 平台中使用 shell 一些帮助, 感谢读者耐心的阅读.
来源: http://www.bubuko.com/infodetail-2753450.html