君子性非异也,善假于物也!bash亦如此。
昨晚今早的世界杯甚是精彩,深夜醒来就不断看手机直播,早上起来水没喝一口就开始欣赏英格兰和意大利
的对决,太TM精彩,最终孕育罗马文化,埃特鲁里亚文化的意大利获取胜利,我甚是欢喜,紧接着观摩下一场比赛,本田圭佑的进球甚是鬼斧神工,本来想加班
的,却研究起了复杂六度分割网络,有点乱,但是还是在下午的时候悟出了一点什么。小小睡在旁,心里想着怎么把bash组织成一棵树,因为我实在不想也没有
能力使用Python来创建所谓的高级的数据结构,比如树。
树,一个人类的常规组织形式,一个将近一万年为人类所用的数据类型,如今被映射进计算机数据结构的时候被赋予了独特的地位,二叉树,堆,AVL树,红黑
树,256叉树,Radix树,...不一而足,几乎所有的编程语言都内置了这些树的数据结构类型,即便不是如此,也会有很多狂热的开发人员组建一系列的
所谓库来实现这些树的接口。但是除了一种语言,即Shell,对于LInux而言就是bash(我从来不用其它的shell,虽然历史渊源深厚,但历史不
是现实,这是理解历史的好处...),为什么没有人开发Linux的树型数据结构呢?...shell是一种粘合语言,不是一种实现逻辑的语言,这也许就
是根本??如果世界杯解说员在解说西班牙VS荷兰对决的时候,在荷兰进球前一直倾向于西班牙会赢,无异于低水平的***,实际上当我说没有人实现bash版
本的树型数据结构的时候,造就有人发在了github上了,只是我这个傻BI没有找到而已,所以我不再按照长平之战的原则来评论此事,我只是试着去做,因
为如果我做不到,将是我工作的重大失职,就如同西班牙球员将球送进自己的球门一样...bash为何没有简单的办法实现树型结构,甚至没有实现任何的数据
结构,原因在于,它不需要!
君子善假于物也,bash本身没有tree的语义,但是UNIX的文件系统正是tree组织的,而bash操作UNIX目录/文件简直就是如鱼得水,我突
然想到了Linux内核的make
menuconfig是怎么找到那么多的config的,事实上不需要一个统一的congifg,只需要各个文件目录自己构建自己的config项就可以
了,make的时候自然会遍历文件系统,然后取出config项目,仅此而已,Linux的诸如make
menuconfig命令不需要自己实现一套遍历目录的算法。如果我想实现一个树型的操作序列,比如在ECC算法下的TLS分别用SM1和SM4来进行对
称加密,使用ECC或者SM2进行认证(即所谓的算法套间,cipher-suit),怎么办?按照传统的编程语言,我要内建一个struct,实现一个
树,但是,但是现代的复杂问题已经不允许你去编写和编译所谓的结构体了(关键在于编译),问题的根本在于你是在想用这些语言解决你的问题(去年我..一个
表,我过不去的坎)还是你想研究编程语言本身,如果是后者,请略过此文,但如果不是,我觉得C/C++/Java已经不适合
了,Python,Perl,Bash更合适,因为这些语言可以让你不必去思想如何构建一棵树的问题,以Python为例,不必多说,我懂得没你多,但是
以bash为例呢?由于没有什么库可以使用,你瞬间呆住了!...我一直以来也是这样考虑的,,但突然,我不这么认为了,我觉得bash能够利用的库
(Library)不是没有,而是很多,多到什么程度?答案是整个系统!
Linux的目录系统是一个树型结构,bash可以很好的利用它!bash虽然没有内建任何结构,但是却可以利用所有的其它结构。Linux内核的设计者
已经想到了这一点,看一下sysfs和procfs吧,当你使用cat/echo等命令来操作的时候,是不是觉得比自己写代码更轻松些呢(虽然少了自己炫
技巧的机会...)?不要把文件系统当作一个龌龊的IPC机制,实际上你可以变通,你可以将内存的好几G,比如1G全部构建一个ramfs,然后在里面尽
情搞文件操作吧,不会有任何性能损失,记住,文件IO只是一个接口而已(请别跟我扯系统调用会影响效率,也许可以使用mmap...书看多了,课上傻
了...)!文件接口是一个非常猛的东西,它可以内建你无法实现的数据结构,比如树。我没有必在脚本内部维护一棵树,我只需要建立一个树型的文件目录系统
即可,然后利用丰富的文件系统IO命令来蹂躏它,如果你不想让我的额外文件系统污染你那纯洁的文件系统,我就建立一个ramfs,我只是将内存格式化了而
已!
bash不是编程语言,然而它又是所有的编程语言,它可以粘合所有的语言写成的逻辑,其内恰性远远超过诸如Python,Perl,PHP之类的语言,它
是UNIX内建的!bash,它实际上就是UNIX本身的编程语言,UNIX本身就是一个库!我不是反对现代软件工程,我只是觉得在某些领域,某些地方,
某些日常事务,软件工程确实走偏了方向。
大师出手的时候不知道自己用的招数的名字,我在想,那些所谓精通设计模式的人们,你们可曾知道,你们比设计模式领域的大师更猛,因为当这些大师在做一个系
统的时候,实在不知道自己在使用什么模式,但是你可能更知道。突然想到了《依天屠龙记》中张三丰问张无忌,直到张无忌的功夫口诀全部忘记之后,才允许其出
战,精髓所在!
花式足球竞赛进行中,高手都是一帮跳街舞的人,技术太TMD炫了,但在世界杯中除了C罗几乎没有人炫花式技巧,于是我曾经想,花式足球不实用,只适合表
演,可是看了世界杯大牌明星这些人的花式足球表演后,我知道了,有些技巧只适合炫技,但是精髓并不包含在所谓的能炫的技巧中。
bash组织成树型数据结构
时间: 2024-10-22 14:52:07
bash组织成树型数据结构的相关文章
bash组织成树数据结构
君子也非独占,善假于物!bash也因此.昨天晚上,今天早上世界杯很精彩.晚上醒来看到不断地居住的电话.早上没有喝的水开始赞赏在英国和意大利的对决.也TM精彩,最后生下了罗马文化.意大利伊特鲁里亚文化获得胜利,我甚至会很高兴,然后看接下来的比赛,本田圭佑的进球很不可思议,原本打算加班.研究起了复杂六度切割网络.有点乱,可是还是在下午的时候悟出了一点什么.小小睡在旁,心里想着怎么把bash组织成一棵树,由于我实在不想也没有能力使用Python来创建所谓的高级的数据结构,比方树. 树.一个人类的常规组
功能清单转成树型结构
如图所示,左侧为合同中的功能清单转成最右列的结果(树型结构): 1.首选在二级分类.三级分类上插入空行,构造出层次:新增D列,将要插空行的那一行(红色字体)设为空,其它行写入值(这里随便写了个1).选中D列的值,然后到“查找&选择”里,找到 定位 选择 空值(Blanks)此时,两空值列将标为选中状态.右击,插入此时,红字上方将会插入一行空的行.将第二2格式刷刷一下,A列整体向上移一行.如下图所示--------------------------------------------------
【12】python 栈型数据结构模拟、队列型数据结构模拟
一.压栈操作模拟 #__author:"吉*佳" #date: 2018/10/21 0021 #function:栈 # 栈:即是先进后出的一种数据结构 # (1)模拟压栈操作 stack=[] flag=True while flag: temp = input("请输入压栈元素[输入0代表退出]:") if temp!=str(0): stack.append(temp) else: print('压栈结束,栈内元素为:', stack) # 借助flag退出
数据库数据变成树型结构
<?php $arrData= array( array( "id" => "1", "pid" => "0", "name" => "山东" ), array( "id" => "2", "pid" => "0", "name" => "
linux虚拟文件系统浅析
linux虚拟文件系统浅析 虚拟文件系统(VFS)在我看来, "虚拟"二字主要有两层含义:1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细节, 为使用者提供统一的接口;2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构. 目录结构是由"地址空间(namespace)"来描述的, 不同的进程可能拥有不同的namespace, 不同的namespace可能有着不同的目录结构(因为它们可能挂载了不同的文件系统).操作
(转)虚拟文件系统(VFS)浅析
http://www.cnblogs.com/zsw-1993/p/5048144.html 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细节, 为使用者提供统一的接口; 2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构. 目录结构是由"地址空间(namespace)"来描述的, 不同的进程可能拥有不同的namespace, 不同的namespace可能有着不同的目
[转载] 深入理解log机制
原文: http://feihu.me/blog/2014/insight-into-log/ 诊断日志对于定位和修复问题起着至关重要的作用, 曾经很傻很天真的认为输出日志就是仅仅调用printf(或者std::cerr)而已, 简单的不能在简单了. 这种想法现在看来可笑至极, 本文对一个成熟的log库需要的功能, 以及日常中输出日志的方法做了深刻的讲解, 希望读过这篇文章的朋友, 从现在开始重视"打日志"这一环节, 并且选一个自己用起来方便的日志库. 也感谢作者图文并茂的讲解. 最近
Linux 入门基础 及一些常见命令
计算机的组成及其各部分的功能 现代计算机的基本结构是由匈牙利-美国科学家冯· 诺依曼于1946年提出的.迄今为止所有进入实用的电子计算机 都是按冯· 诺依曼提出的结构体系和工作原理设计制造的,故又统称为"冯·诺依曼型计算机". 根据冯.诺依曼原理:计算机由运算器.控制器.存储器.输入设备.输出设备所组成. 运算器: 进行算术与逻辑运算. 控制器: 从内存中依次取出命令,产生控制信号,向其它部件发出指令,指挥整个运算过程. 运算器,控制器,缓存,寄存器组成CPU. 存储器: 分为内部
数据类型和常用数据结构
1.数据类型 几乎是所有的程序设计语言都会讲到数据类型的概念.简单的说,数据类型就是一个值的集合及在这些值上定义的一系列操作的总称.例如:对于C语言的整数类型,其有一定的取值范围,对于整数类型还定义了加法.减法.乘法.除法和取模运算等操作. 按照数据类型的值是否可以分解,数据类型可以分为基本数据类型和聚合数据类型. *基本数据类型:其值不能进一步分解,一般是程序设计语言自身定义的一些数据类型,例如C语言中.字符型.浮点型等. *聚合数据类型:其值可以进一步分解为若干分量,一般是用户自定义的数据类