猜想: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. 关于read的例子和条件测试

    1.关于read比较两个的大小 #!/bin/sh read -t -p "please input two num:" a b if [ $a -gt $b ]; then ec ...

  2. jenkins 每个月1号到7号 一天执行一次

    在线Crontab表达式执行时间验证 / crontab执行时间计算 - aTool在线工具验证 http://www.atool.org/crontab.php 1.Build periodic a ...

  3. JSP入门必读

    JSP基础知识:转自老师上课梳理的笔记,希望对大家有所帮助.有什么不妥当的地方还望大家批评指正. 特别适用于JSP入门的人员使用.1.JSP [1] 简介1.1 HTML    HTML擅长显示一个静 ...

  4. Java集合类库list(1)ArrayList实例

    public class ArrayListTest { public static void main(String[] args) { //创建空的ArrayList列表 ArrayList al ...

  5. java面向对象(二)之继承

    继承 介绍 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力.继承即常说的is-a关系.子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承 ...

  6. 互联网世界中的C语言——我的golang学习笔记:1(基础语法快速过)

    前言 学习任何知识都会有一个学习背景 最近,我们团队乃至我司整个云服务,上go的呼声越来越高!新服务已经开始用go开发,部分现有Java版的服务重构为go也只是时间问题而已,故相关技术积累势在必行!在 ...

  7. ASP.NET Core Razor 视图组件

    视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大.视图组件不使用模型绑定,仅依赖于您在调用时提供的数据. 视图组件特性: 呈现页面响应的某一部分而不是整个响 ...

  8. js 对于回车时间的监听,提交表单

    // ------ 监听回车事件 -----------------// document.onkeydown=keyDownSearch; function keyDownSearch(e) { / ...

  9. 求N个元素的子集合个数

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt406 一个集合有n个元素,请问怎么算出来它的子集(包括空集和本身)是 2的n ...

  10. 《深入浅出MySQL》之SQL基础

    SQL是Structure Query language(结构化查询语言)的缩写,它是使用关系模型的数据库应用语言.在众多开源数据中,MySQL正式其中最杰出的代表,MySQL是由三个瑞典人于20世纪 ...