snow

在网上一段shell脚本,虽然只有一行但运行后可以在屏幕上实现下雪的效果,实在让人佩服,决定好好研究一下。

1for((I=0;J=--I;))do clear;for((D=LINES;S=++J**3%COLUMNS,--D;))do printf %*s.\\n $S;done;sleep .1;done

不过原代码虽然简洁但不太容易一下子看明白工作原理,而且只能在命令行上运行无法保存成脚本文件,所以自己按照理解重新写了一遍:

 1#!/bin/sh
 2
 3rows=$(tput lines)
 4cols=$(tput cols)
 5
 6i=0
 7while true
 8do
 9    clear
10    ((x=i,i++))
11    for((r=0;r<rows;r++))
12    do
13        printf "%*s*\n" $((x**3%cols))
14        ((x--))
15    done
16    sleep .1
17done