当前位置: 首页 > news >正文

bash组织成树型数据结构

君子性非异也,善假于物也!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罗几乎没有人炫花式技巧,于是我曾经想,花式足球不实用,只适合表 演,可是看了世界杯大牌明星这些人的花式足球表演后,我知道了,有些技巧只适合炫技,但是精髓并不包含在所谓的能炫的技巧中。


 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1426729


相关文章:

  • CentOS 5.4 通过yum升级php到5.3版本的两种方
  • Nginx之不能解析下载站顶部和底部的inc文件
  • 【转】 iphone开发常用代码
  • 学习笔记 124: 预备知识总结
  • Js参数值中含有单引号或双引号解决办法
  • 学习笔记 十五: mariadb
  • mysql 优化几个注意点(非完全统计)
  • Python中的tuple
  • MySQL都有哪些日志?分别都代表什么?
  • Centos 7.4 安装ipython和mysql-python遇到的问题
  • Windows XP SP3 升级故障汇总
  • 【VC+图像】图片批量处理
  • SVN 的使用(一) 命令行模式
  • 为什么我们需要域?Active Directory系列之一
  • 【实战】锐捷AC+AP配置WLAN基本服务系列
  • [数据结构]链表的实现在PHP中
  • 2017-08-04 前端日报
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Java程序员幽默爆笑锦集
  • SQL 难点解决:记录的引用
  • 回顾 Swift 多平台移植进度 #2
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 物联网链路协议
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • HanLP分词命名实体提取详解
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​Linux·i2c驱动架构​
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #大学#套接字
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (07)Hive——窗口函数详解
  • (3)nginx 配置(nginx.conf)
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转) Face-Resources
  • (转)人的集合论——移山之道
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 提取注释生成API文档 帮助文档
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net中的Queue和Stack