欢迎光临散文网 会员登陆 & 注册

Shell数组的奇技淫巧

2023-08-03 17:23 作者:bili_55193953943  | 我要投稿

 1 众所周知,在Shell中可以这样输出变量的值

输出值

2 也可以输出变量的位数

输出值

3.1 那末,定义一个数组,我们可以单个赋值

3.2 也可以一次性赋值(赋值同上)

那末,3+1,可以输出数组中各元素的值

输出值

同样地,3+2,可以得到元素长度和数组长度

输出值

其中@与*的区别如下:
@

输出值

*

输出值

可见,@是分元素,*是通配

3+2结果可得两点特性

  1. 计算数组长度时不会排除空元素

  2. 数组元素从0开始计算,可以得到数组长度

由特性,可得到在数组尾部扩充新元素的方法

输出值

原理很好理解,由于元素序号由0开始计算,数组长度恰好就是下一个元素的序号

4 删除元素

输出值

去除了两个空元素,数组长度为3,但是

输出值为空
明明已经删除了1号与2号两个空元素,后面的元素不会依次补全删掉的位置。要想补全,就得刷新数组:

输出值

此处的@不可替换为*,否则"1 2 3 4 5"会变成一个元素,不加引号都会变成五个元素

以下为两个实践项目:
1, 输入数组元素个数,并依次读入数组

实践如下

其实这个例子蛮牵强的,将第一个for循环中的ele_arr[${#ele_arr[@]}]替换为ele_arr[$i]也不会有任何问题。

2, 输入一个正整数,生成1到该正整数的数组,并打乱输出(不重复)

实践如下

留下一个小问题,最后的xargs是干什么的?

自从用上了shellcheck+vim-syntastic,告别了很多错误&&危险写法,非常推荐一试
本文基于LGPLv3协议(https://www.gnu.org/licenses/lgpl-3.0.zh-cn.html)开源

Shell数组的奇技淫巧的评论 (共 条)

分享到微博请遵守国家法律