猜想: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. Nginx入门案例(Mac版)

    Nginx(engine x)是一个轻量级.高性能的Web和反向代理服务器,也是一个IMAP.POP3和SMTP服务器,并且安装十分简单,配置文件非常简洁,启动特别容易,运行十分稳定,几乎可以做到7* ...

  2. OPENFILENAME使用lpstrFilter过滤文件类型

    OPENFILENAME结构包含了GetOpenFileName和GetSaveFileName函数用来初始化打开或另存为对话框的信息.其中lpstrFilter用来指定文件文件过滤器. 字符串由'\ ...

  3. Mysql 掌握要点

    1. 引擎 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁. 行级锁和表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题. 1.1 I ...

  4. [2015-10-11]tfs2015 vs2013 配置持续集成

    今天刚配置完tfs2015+vs2013的持续集成(自动构建+自动发布),记录一下走过的坑. tfs2015和tfs build server是之前其他同事装的,略去不讲,列一下几个坑以及埋坑方法. ...

  5. python 数据驱动(ddt)

    DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(可以从json或者yaml中获取测试数据) 实例代码: import ddt import unittest ...

  6. 转载 Java基本数据类型

    Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed ...

  7. vue2

    props 向子组件传递数据是经常会用到的,一般是在子组件定义 props 来接受数据,当父组件改变数据时子组件的数据也会进行更新.但这里是有一个坑的,先看代码: <pagination :pa ...

  8. LINUX服务器上新增用户名

    最近所里的机群停了,需要用老板的服务器跑程序,这里首先得在老板的服务器上新增一些用户名.新增用户名方法如下: 1.利用useradd添加用户名,并指定用户名目录.脚本解释器.用户名 sudo user ...

  9. 【.net 深呼吸】WPF 中的父子窗口

    与 WinForm 不同,WPF 并没有 MDI 窗口,但 WPF 的窗口之间是可以存在“父子”关系的. 我们会发现,Window 类公开了一个属性叫 Owner,这个属性是可读可写的,从名字上我们也 ...

  10. Project 1 :创建链表与显示链表

    目标:创建一个链表,并将链表输出.结构体中包括学号与分数.链表以输入学号为0作为结束.输出模版为 No.学号 Score:分数 输入样例: 10101 98 10102 97 10103 100 10 ...