猜想:Shell支持关联数组,可以利用关联数组模拟二维数组。

【验证猜想】

#!/bin/bash

array[1,1]=1
array[2,1]=2
array[3,1]=3 for i in `seq 3`
do
printf "array[%d,%d]=%d\n" $i 1 ${array[$i,1]}
done //【运行结果如下】
array[1,1]=3
array[2,1]=3
array[3,1]=3

是否由于逗号引起结果错误?

将array[1,1]替换为array["1,1"](其它类似),结果一样。说明不是因为逗号!

#!/bin/bash

array[1,0]=0
array[1,1]=1
array[1,a]=a echo ${array[1,0]},${array[1,1]},${array[1,a]}
export array
export | grep "array" //运行结果如下
a,1,a
export -a array="([0]="a" [1]="1")"
通过上面可以看出,若不显式声明,则数组默认为普通数组,非法的下标被置为0

在man手册中查找得到如下结果

-a    Each name is an indexed array variable
-A Each name is an associative array variable

即可使用关联数组模拟二维数组

【终端随机字符下降】

shell下通过环境变量$LINES、$COLUMNS获取终端高度、宽度

#!/bin/bash
typeset -A array
row=$LINES //获取终端宽度
col=$COLUMNS //获取终端高度 function init_array () //初始化array数组
{
for i in `seq $row`
do
for j in `seq $col`
do
array[$i,$j]=0
done
done
} function print_line () //打印一条直线
{
for i in `seq $col`
do
printf "-"
done
} function print_array ()
{
print_array //打印上边框
for i in `seq $row`
do
for j in `seq $col`
do
if [ ${array[$i,$j]} -ne 0 ] //若数组元素不为0,则打印对应字符
then
printf ${array[$i,$j]} | awk '{printf("%c",$1)}'
else
printf " "
fi
done
done
print_array //打印下边框
} function rand_character
{
site=$(($(($RANDOM%100))+1)) //产生1-100之间的随机数
t=$(($(($RANDOM%5))+1)) //产生1-5之间的随机数
array[$t,$site]=$(($(($RANDOM%26))+97)) //产生a-z之间的随机字符
} function decline_character
{
for j in `seq $col`
do
for i in `seq 2 $row | sort -n -r` //产生$row->2的递减序列
do
let m=i-1
if [ ${array[$m,$j]} -ne 0 ] //每列由下向上,若上面元素不为0,则下移1个单位
then
array[$i,$j]=${array[$m,$j]}
array[$m,$j]=0 //将字符原位置重置为0
fi
done
done
} init_array
n=0
while(($n<100))
do
clear //清除屏幕
rand_character //产生随机字符
print_array //打印数组
decline_character //下移字符
sleep 0.5 //暂停500毫秒
((n++))
done

shell二位数组——终端字符下降动画的更多相关文章

  1. C++ 出现bug :二位数组的操作运算,求非对角线的元素的和

    编写一个通用程序,求出二位数组(行数和列数必须相等)的非对角线的元素之和,试建立类MATRIX完成上述功能 #include<iostream> using namespace std; ...

  2. PHP 之二位数组根据某个字段排序封装

    /** * @param $array * @param $keys * @param string $sort * @return array */ function arraySort($arra ...

  3. java中Arrays.sort()对二位数组进行排序

    int [][]a = new int [5][2]; //定义一个二维数组,其中所包含的一维数组具有两个元素 对于一个已定义的二位数组a经行如下规则排序,首先按照每一个对应的一维数组第一个元素进行升 ...

  4. 【shell】构造并遍历二位数组的一种用法

    参考shell数组的部分操作用法,实现了构造和遍历二维数组的一种方式,具体如下: #数组元素以空格分割 sites=("www.a.com www.b.com www.c.com www.d ...

  5. php二位数组合并

    转自:http://www.cnblogs.com/losesea/archive/2013/06/14/3134900.html 题目:有以下2个二维数组 1$a=Array(0 => Arr ...

  6. vector创建二位数组

    默认初始化vector vector<vevtor<int> > arr(row, vector<int>(col, 0)); //指定行大小为row,列为col, ...

  7. Rotate Image(二位数组顺时针旋转)

    问题描述: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockw ...

  8. php 按照二位数组中某个指定的字段进行排序

    /** * 按照二维数组中某个指定的某个字段进行排序 * @param $array 需要被排序的数组 * @param $flag 排序的标志 1,SORT_DESC 降序 2,SORT_ASC 升 ...

  9. 剑指offer:二位数组中的查找

    准备找实习期间,复习一下数据相关内容,刷刷题. 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样 ...

随机推荐

  1. 当使用composer安装组件时提示错误

    这种情况可以重装一下fxp/composer-asset-plugin 具体命令: php composer.phar global require "fxp/composer-asset- ...

  2. BotVS数字货币现货交易类库

    以下是BotVS数字货币现货交易类库模板,使用Python2语言实现 import types # 导入类型模块 import time # 导入时间模块 import platform # 版本信息 ...

  3. 使用angular的HttpClient搭配rxjs

    一.原Http使用总结 使用方法 在根模块或核心模块引入HttpModule 即在AppModule或CoreModule中引入HttpModule: import { HttpModule } fr ...

  4. linux(九)之网络基础

    一.ping命令 1.1.作用 用于检测主机.执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常. 1.2.命令说明 pi ...

  5. HTML脚本配置Android自动化测试

    说明   在项目配置完基于robotium框架下的自动化测试用例后发现虽然用代码配置测试用例虽然较为灵活,但是如果编写较为全面的测试用例则必然会消耗大量开人员的精力,并且对于用例的后期维护也是很大一部 ...

  6. 自己动手写java 字节流输入输出流

    数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.   "流是磁盘或其它外围设备中存储的数据的源点或终点." ...

  7. MySQL视图view/存储过程和函数的使用

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  8. HTML <area><map>标签及在实际开发中的应用

    之前,我一直以为HTML <area>是一个鸡肋HTML,估计到了HTML5时代会被废弃的命.但是,最近一查资料,乖乖了个咚,不仅没被废弃,反而发展了,新增了一些标签属性,例如rel,me ...

  9. ActiveMQ笔记——技术点汇总

    目录 · Introduction to ActiveMQ · Installing ActiveMQ · Message-oriented middleware · JMS specificatio ...

  10. CyclicBarrier和CountDownLatch介绍

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp70 CyclicBarrier介绍 (一) 一个同步辅助类,它允许一组线 ...