shell二位数组——终端字符下降动画
猜想: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")"
在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二位数组——终端字符下降动画的更多相关文章
- C++ 出现bug :二位数组的操作运算,求非对角线的元素的和
编写一个通用程序,求出二位数组(行数和列数必须相等)的非对角线的元素之和,试建立类MATRIX完成上述功能 #include<iostream> using namespace std; ...
- PHP 之二位数组根据某个字段排序封装
/** * @param $array * @param $keys * @param string $sort * @return array */ function arraySort($arra ...
- java中Arrays.sort()对二位数组进行排序
int [][]a = new int [5][2]; //定义一个二维数组,其中所包含的一维数组具有两个元素 对于一个已定义的二位数组a经行如下规则排序,首先按照每一个对应的一维数组第一个元素进行升 ...
- 【shell】构造并遍历二位数组的一种用法
参考shell数组的部分操作用法,实现了构造和遍历二维数组的一种方式,具体如下: #数组元素以空格分割 sites=("www.a.com www.b.com www.c.com www.d ...
- php二位数组合并
转自:http://www.cnblogs.com/losesea/archive/2013/06/14/3134900.html 题目:有以下2个二维数组 1$a=Array(0 => Arr ...
- vector创建二位数组
默认初始化vector vector<vevtor<int> > arr(row, vector<int>(col, 0)); //指定行大小为row,列为col, ...
- Rotate Image(二位数组顺时针旋转)
问题描述: You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockw ...
- php 按照二位数组中某个指定的字段进行排序
/** * 按照二维数组中某个指定的某个字段进行排序 * @param $array 需要被排序的数组 * @param $flag 排序的标志 1,SORT_DESC 降序 2,SORT_ASC 升 ...
- 剑指offer:二位数组中的查找
准备找实习期间,复习一下数据相关内容,刷刷题. 题目描述: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样 ...
随机推荐
- 学习CSS记录:CSS文件引入到HTML中
1.直接写在标签元素中,通常称为行间样式.(优先级较高,有悖于结构与表现的分离,建议不使用) 例:<body style="background:red;"></ ...
- [译] OpenStack Pike 版本中的 53 个新功能盘点
原文:https://www.mirantis.com/blog/53-things-to-look-for-in-openstack-pike/ 作者:Mirantis Nick Chase 发 ...
- poj3876 darts
Darts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 58 Accepted: 32 Special Judge ...
- HK2使用详解
HK2介绍 组件 生命周期 定义服务 注入服务 HK2介绍 HK2是一个轻量级动态依赖注入框架,它是JSR-330的实现. 组件 在HK2组件模型中,一个组件的功能是通过服务接口-服务实现的模式声明的 ...
- C语言运算符运算顺序判断实例2
#include <stdio.h> int main(void) { , j = , k = ; printf("%d\n", ++i || ++j &&am ...
- c# typeof 与 GetType 作用与区别
官方解释: Used to obtain the "System.Type" object for a type. A 'typeof' expression takes the ...
- 10分钟搞懂Tensorflow 逻辑回归实现手写识别
1. Tensorflow 逻辑回归实现手写识别 1.1. 逻辑回归原理 1.1.1. 逻辑回归 1.1.2. 损失函数 1.2. 实例:手写识别系统 1.1. 逻辑回归原理 1.1.1. 逻辑回归 ...
- Cetnos搭建vsftp服务器
1.首先yum安装vsftp server 以3.0.2为例 命令:yum -y install vsftpd 2.配置文件 vsftp.conf 具体配置内容如下: anonymous_ena ...
- 201521123062《Java程序设计》第7周学习总结
1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码如下: public boolean contains(Object ...
- Java 第六周总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...